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

Модальное диалоговое окно должно быть всплывающее окно системного меню, строки заголовка и толщиной границы; то есть шаблон поля диалогового окна следует указывать стили WS_POPUP, WS_SYSMENU, WS_CAPTION и DS_MODALFRAME. Хотя приложение может назначить стиль WS_VISIBLE, система всегда отображает модальное диалоговое окно независимо от ли шаблон поля диалогового окна определяет стиль WS_VISIBLE. Приложение не должно создавать модальные диалоговые окна, имеющие WS_CHILD стиль. Модальное диалоговое окно с этим стилем прекращает, предотвращение любой последующий ввод от достижения приложения.

Приложение создает модальное диалоговое окно, используя диалоговое окно или DialogBoxIndirect функции. Диалоговое окно требует имя или идентификатор ресурса, содержащего шаблон поля диалогового окна; DialogBoxIndirect требует дескриптор объекта памяти, содержащий шаблон поля диалогового окна. Функции DialogBoxParam и DialogBoxIndirectParam также создавать модальные диалоговые окна; они идентичны ранее упомянутых функций, но передать указанный параметр процедуру диалогового окна при создании диалогового окна.

При создании модального диалогового окна, система делает его активным окном. Диалоговое окно "" остается активной до тех пор, пока процедуру диалогового окна вызывает функцию EndDialog или система активирует окно в другом приложении. Ни пользователь, ни приложение можно сделать окно-владелец активной до тех пор, пока будет уничтожен модальное диалоговое.

Когда окно-владелец уже не отключена, система автоматически отключает окна и принадлежащих к нему, когда он создает модальное диалоговое окна ребенок. Окно владельца по-прежнему инвалидов до тех пор, пока диалоговое окно будет уничтожен. Хотя процедура окна Диалоговое окно потенциально может позволить окно владельца в любое время, что позволяет владельцу поражений цель модального диалогового окна и не рекомендуется. Когда уничтожается процедуру диалогового окна, система позволяет окно-владелец снова, но если модальное диалоговое обусловлены только владельцу следует отключить.

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

Для обработки сообщений для модального диалогового окна, система начинает свой собственный цикл обработки сообщений, временный контроль над очереди сообщений для всего приложения. Когда система получает сообщение, которое не является явно для диалогового окна, он отправляет сообщение в соответствующие окна. Если он получает WM_QUIT сообщение, он выполняет сообщения обратно в очередь сообщений приложения таким образом, чтобы приложения основной цикл обработки сообщений в конечном итоге может извлечь сообщение.

Система отправляет сообщение WM_ENTERIDLE окно-владелец, всякий раз, когда в очередь сообщений приложения является пустым. Приложение может использовать это сообщение для выполнения фоновой задачи, в то время как диалоговое окно остается на экране. Когда приложение использует сообщение таким образом, приложение должно стать принятие часто контролировать (например, с помощью функции PeekMessage ) так, что модальное диалоговое может получить любой пользовательский ввод. Чтобы запретить отправку сообщений WM_ENTERIDLE модального диалогового окна, в приложении можно указать стиль DS_NOIDLEMSG при создании диалогового.

Приложение разрушает модальное диалоговое окно, используя функцию EndDialog . В большинстве случаев процедуру диалогового окна вызывает EndDialog , когда пользователь выбирает команду «Закрыть» меню системы диалоговым окном или выбирает кнопку ОК или Отмена в диалоговом окне. Диалоговое окно "" может возвращать значение через диалоговое окно функция (или других функций создания), указав значение при вызове функции EndDialog . Система возвращает это значение после разрушения диалогового окна. Большинство приложений используют это возвращаемое значение для определения диалогового окна успешно выполнила свою задачу или была прервана пользователем. Система не возвращает управления из функции, которая создает диалоговое окно, до тех пор, пока процедуру диалогового окна называется функцией EndDialog.

Index