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

Лекція № 20

Тема: Немодальні діалогові вікна

План

1. Немодальні діалогові вікна

2. Створення і відображення

3. Обмін даними і інформацією про стан

 

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

На відміну від модальних діалогових вікон, при відображенні немодальних діалогових вікон операційна система Windows допускає взаємодію користувача з батьківським вікном цього діалогового вікна. При взаємодії користувача з батьківським вікном немодальне діалогове вікно продовжує відображатися на екрані, а також залишатися вище за батьківське вікно в списку порядку накладення вікон (Z-order). І це не дивлячись на те, що фокус має батьківське вікно.

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

1. Створення ресурсу шаблону діалогового вікна. Звернете увагу, діалогові вікна в немодальному режимі не мають ніяких спеціальних стилів.

2. Створення для шаблону класу, похідного від CDialog. Як і у разі модальних діалогових вікон, для створення класу, похідного від CDialog, застосовується майстер ClassWizard.

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

4. Створення екземпляра класу діалогового вікна в батьківському класі. Параметри, передані в конструкторі немодального діалогового вікна, зазвичай залежать від способу його взаємодії з батьківським вікном. Діалоговому вікну передають покажчик на батьківське вікно this, що дозволяє йому передавати дані назад екземпляру батьківського вікна.

5. Відображення немодального діалогового вікна. Для відображення немодального діалогового вікна батьківське вікно викликає функцію CDialog : : Create (а також, можливо, і функцію CWnd: : ShowWinclow), докладніша інформація по цій темі приведена в розділі "Створення і відображення немодальних діалогових вікон".

6. Обмін інформацією між кодом батьківського і немодального діалогових вікон. Більшості немодальних діалогових вікон необхідні засоби обміну даними (комунікації) між ним і батьківським вікном. Як правило, для цього застосовуються два підходи. Вони мають на увазі передачу конструктору діалогового вікна покажчика this на батьківське вікно, що дозволить діалоговому вікну безпосередньо викликати функції-члени класу батьківського вікна. Інший підхід, що також має на увазі передачу діалоговому вікну покажчика this на батьківське вікно, полягає в передачі батьківському вікну спеціальних повідомлень. Докладніша інформація по цій темі приведена в розділі "Обмін даними і інформацією про стан".

7. Маніпулювання немодальним діалоговим вікном з батьківського вікна. Мова йде про тому факті, що немодальні діалогові вікна не можуть бути видалені просто так, наприклад, за допомогою виклику функції CDialog: :OnOK або CDialog: .-OnCancel. Ці функції підходять лише для модальних діалогових вікон, а немодальні діалогові вікна, при необхідності видалення, вимушені зв'язуватися з батьківським вікном. Це саме те, що автор має на увазі під терміном обмін інформацією про стан (communicating state). Оскільки для передачі цій інформації батьківському вікну використовується та ж технологія, що і для передачі будь-яких інших даних, вона також розглядається в розділі "Обмін даними і інформацією про стан".