Модальних діалогових вікон

Модальне діалогове вікно має бути спливаюче вікно з системного меню, рядок заголовка та товсті кордону; тобто, діалоговому вікні шаблон слід вказати стилі, WS_POPUP, WS_SYSMENU, WS_CAPTION і DS_MODALFRAME. Хоча застосування може призначити стиль WS_VISIBLE, система завжди відображає модальне діалогове вікно незалежно від того, чи діалоговому вікні шаблон визначає стиль WS_VISIBLE. Застосунок не потрібно створити модальне діалогове вікно з WS_CHILD стилю. Модальне діалогове вікно з цього стилю вимикається сам, запобігання будь-яких подальших вводу від досягнення програми.

Застосунок створює модальне діалогове вікно за допомогою функції або DialogBox , або DialogBoxIndirect . DialogBox вимагає ім'я або ідентифікатор ресурсу, який містить діалоговому вікні шаблон; DialogBoxIndirect потребує маркер пам'яті об'єкт, що містить діалоговому вікні шаблон. Функції DialogBoxParam і DialogBoxIndirectParam також створити модальних діалогових вікон; вони ідентичні до раніше згаданих функцій, але пройти Указаний параметр у діалоговому вікні порядку, коли створюється діалогового вікна.

Під час створення модальне діалогове вікно, система дозволяє активного вікна. Діалогове вікно залишається активним, поки діалоговому вікні порядок називає EndDialog функцією або система активує вікна в іншому додатку. Додатка ані користувач може перейти до власника вікна поки знищені модальне діалогове вікно.

Коли власник вікно вже не відключений, система автоматично вимикає вікна і будь-якої дитини windows, що належать до нього, коли він створює модальне діалогове вікно. Власник вікно лишається неактивним, доки знищені діалогового вікна. Хоча в діалоговому вікні процедури може потенційно дозволить власник вікно в будь-який час, дозволяючи власник поразки мети модальне діалогове вікно і не рекомендується. Коли знищено діалоговому вікні порядок, система дозволяє власник вікно знову, але тільки якщо модальне діалогове вікно викликані власника, щоб вимкнути.

Як система створює модальне діалогове вікно, він посилає повідомлення WM_CANCELMODE вікна (якщо є) в даний час захоплення введення миші. Застосунок, що отримує повідомлення повинні звільнити миші захоплення, так що користувач може перемістити мишу в модальне діалогове вікно. Оскільки система вимикає власник вікна, всі миші вводу втрачається, якщо власник, не вдається, відпустіть кнопку миші, після отримання цього повідомлення.

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

Система надсилає повідомлення WM_ENTERIDLE власник вікно кожного разу, коли застосування черга повідомлень пуста. Застосування за допомогою цього повідомлення можна виконувати у фоновому режимі, а діалогове вікно залишається на екрані. Коли є застосування використовує повідомлення таким чином, застосування часто повинен дати керування (наприклад, за допомогою функції PeekMessage ) так що модальне діалогове вікно можна отримати будь-яких введення даних. Щоб запобігти модальне діалогове вікно надсилання повідомлень WM_ENTERIDLE, додаток можна вказати стиль DS_NOIDLEMSG під час створення діалогового вікна.

Застосунок руйнує модальне діалогове вікно за допомогою EndDialog функції. У більшості випадків діалоговому вікні порядок дзвінки EndDialog , коли користувач вибирає команду Закрити меню діалоговому вікні системи або вибирає кнопку "ОК" або "Скасувати" в діалоговому вікні. Діалогове вікно можна повернути значення через DialogBox функція (або інші функції створення), вказавши значення, при виклику функції EndDialog . Система повертає це значення після знищення діалогового вікна. Більшість програми використовують цього значення, що повертається, щоб визначити, чи діалоговому вікні виконати своє завдання, або було скасовано користувачем. Система не повертає керування з функцією, яка створює діалогового вікна, поки діалоговому вікні процедура називається функція EndDialog.

Index