Немодальные диалоговые окна


Немодальное диалоговое окно должно быть всплывающим окном, имеющим системное меню, область заголовка и тонкую рамку; то есть шаблон диалогового окна должен установить стили  WS_POPUP, WS_CAPTION, WS_BORDER и WS_SYSMENU. Система автоматически не показывает на экране диалоговое окно, если шаблон не устанавливает стиль WS_VISIBLE.

Приложение создает немодальное диалоговое окно, используя функцию CreateDialog или CreateDialogIndirect. CreateDialog требует имени или идентификатора ресурса, содержащего шаблон диалогового окна; CreateDialogIndirect требует дескриптора объекта памяти, содержащего шаблон блока диалога. Две других функции, CreateDialogParam и CreateDialogIndirectParam, также создают немодальные диалоговые окна; они передают заданный параметр в процедуру диалогового окна, когда создается диалоговое окно.

CreateDialog и другие функции создания возвращают дескриптор диалогового окна. Приложение и процедура диалогового окна могут использовать этот дескриптор, чтобы управлять диалоговым окном. Например, если в шаблоне диалогового окна WS_VISIBLE не определен, приложение может показать на экране диалоговое окно, передавая дескриптор окна функции ShowWindow.

Немодальное диалоговое окно не отключает окно владельца, не отправляет сообщения ему. При создании диалогового окна, система делает его активным окном, но пользователь или приложение может заменить активное окно в любое время. Если диалоговое окно действительно становится неактивным, оно остается выше окна владельца в  Z-последовательности, даже если окно владелец активное.

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

Немодальное диалоговое окно не может возвратить значение приложению, как это делает модальное диалоговое окно, но процедура диалогового окна может отправить информацию окну владельцу, используя функцию SendMessage.

Приложение перед завершением работы должно разрушить все немодальные диалоговые окна. Оно может разрушить немодальное диалоговое окно, используя функцию DestroyWindow. В большинстве случаев, процедура диалогового окна вызывает  DestroyWindow в ответ на ввод данных пользователем, таких как щелчок по кнопке Отменить (Cancel). Если пользователь не закрывает диалоговое окно этим способом, DestroyWindow должно вызвать приложение.

DestroyWindow аннулирует дескриптор  диалогового окна, так что любые последующие вызовы функций, которые используют этот дескриптор  возвращают значения ошибки. Чтобы предотвратить ошибки, процедура диалогового окна должна уведомить владельца, что диалоговое окно разрушилось. Многие приложения обслуживают глобальную переменную, содержащую дескриптор диалогового окна. Когда процедура диалогового окна уничтожает блок диалога, она также устанавливает глобальную переменную в ПУСТО (NULL), указывая, что диалоговое окно больше не допустимо.

Процедура диалогового окна не должна вызывать функцию EndDialog, чтобы разрушить немодальное диалоговое окно.

 

Назад в оглавление
На главную страницу

Hosted by uCoz