Пользовательские диалоговые окна

Приложение можно создавать пользовательские диалоговые окна с помощью класса window, определяемые приложением для диалоговых окон вместо того, чтобы с помощью класса box предопределенные диалогового окна. Приложения обычно используют этот метод, когда диалоговое окно является их главное окно, но это также полезно для создания модальные и немодальные диалоговые окна для приложения, использующие стандартные перекрывающихся окон.

Класс определяется приложением окна позволяет приложению определить процедуру окна для сообщений box и процесс диалога перед отправкой их на процедуру диалогового окна. Это также позволяет определить класс меню для диалогового окна, фоновую кисть класса и класса значок приложения. Приложение необходимо зарегистрировать класс окна перед попыткой создать диалоговое окно и должны обеспечивать диалогового окна поле шаблон атома значение или имя класса окна.

Многие приложения создают новый класс поля диалогового окна первого получения сведений класса для класса box предопределенные диалогового окна и передачи его в функцию GetClassInfo , которая заполняет структуру WNDCLASS с информацией. Приложение изменяет отдельные члены структуры, такие, как имя класса, кисть и значок, а затем регистрируется новый класс, используя функцию RegisterClass . Если приложение заполняет WNDCLASS структура сама по себе, он должен установить значение члена cbWndExtra для DLGWINDOWEXTRA, который является количество дополнительные байты, которые система требует для каждого диалогового. Если приложение использует дополнительные байты для каждого диалогового окна, они должны быть за пределами дополнительные байты, требуемых системой.

Процедура для настраиваемого диалогового окна имеет те же параметры и требования, как любой другой процедуре окна. Однако, в отличие от других окон процедур, процедуры для этого диалогового окна следует вызвать функцию DefDlgProc вместо того, чтобы функции DefWindowProc для любых сообщений, которые не обрабатывает. DefDlgProc выполняет то же сообщение по умолчанию, обработка как процедуру окна для предопределенных диалогового окна, которое включает в себя вызов процедуру диалогового окна.

Приложение также можно создавать пользовательские диалоговые путем создания подклассов процедуру окна диалогового окна заранее. Функция SetWindowLong позволяет приложению задать адрес процедуру окна для данного окна. Приложение также может попытаться подкласс, используя функцию SetClassLong , но это настолько затрагивает все диалоговые окна в системе, не только лиц, принадлежащих к приложению.

Приложения, которые иногда создавать пользовательские диалоговые окна обеспечивают интерфейс альтернативный клавиатуры для диалоговых окон. Немодальное диалоговое окно это может означать, что приложение не вызывает функцию IsDialogMessage и вместо этого все клавиатуры в процедуре пользовательского окна позволяет. В таких случаях приложение может использовать WM_NEXTDLGCTL сообщение для сведения к минимуму необходимый код для перемещения фокуса ввода от одного элемента управления на другой. Это сообщение, при передаче в DefDlgProc, перемещает фокус ввода для указанного элемента управления и обновляет внешний вид элементов управления, таких как перемещение границы по умолчанию кнопка или параметр автоматический переключатель.