2. В даному модулі:
Win32 додатки з використанням діалогових вікон
Типи діалогів
Створення діалогового додатку
Процедура обробки діалогових вікон
Andriy Gladkyy
KspDevelop@gmail.com 2
3. Використання діалогових вікон
Більшість прикладних програм використовує діалогові вікна,
щоб запитати додаткову інформацію для команд, які вимагають
введення даних від користувача.
Використання діалогового вікна - єдиний рекомендований
засіб для прикладної програми, щоб отримати введення даних.
Windows надає два типи блоку діалогу: модальне і немодальне:
Модальное діалогове вікно (modal dialog box) вимагає, щоб
користувач надав інформацію або скасував діалогове вікно для
продовження роботи прикладній програмі.
Немодальне діалогове вікно (modeless dialog box) дозволяє
користувачеві надавати інформацію і повертатися до
прикладної програми без закриття блоку діалогу.
Andrey Gladky
KspDevelop@gmail.co
m 3
4. Створення діалогового додатка
Andrey Gladky
KspDevelop@gmail.co
m 4
Для створення модального діалогу використовується функція
DialogBox:
а для створення немодального діалогу - CreateDialog:
Параметри: hInst - дескриптор екземпляра програми (модуля, в
якому знаходиться шаблон); template - ім'я ресурсу, що описує
діалог; parent - дескриптор батьківського вікна; DlgFunc -
діалогова функція наступного формату:
int WINAPI DialogBox(HANDLE hInst, LPCSTR template, HWND parent,
DLGPROC DlgFunc)
HWND WINAPI CreateDialog(HANDLE hInst, LPCSTR template, HWND
parent, DLGPROC DlgFunc)
BOOL CALLBACK DlgFunc(HWND hw, UINT msg, WPARAM wp,
LPARAM lp)
5. Створення діалогового додатка
Andrey Gladky
KspDevelop@gmail.co
m 5
При створенні діалогового вікна діалогова процедура отримує
повідомлення WM_INITDIALOG. Якщо у відповідь на це
повідомлення процедура повертає FALSE, діалог не буде створено:
функція DialogBox поверне значення -1, а CreateDialog - NULL.
Модальное діалогове вікно блокує вказане в якості батьківського
вікно і з'являється поверх нього (незалежно від стилю
WS_VISIBLE). Додаток закриває модальне діалогове вікно за
допомогою функції:
Додаток повинен викликати цю функцію з діалогової процедури у
відповідь на повідомлення від кнопок "OK", "Cancel" або команди
"Close" з системного меню діалогу. Параметр result передається
програмі як результат повернення з функції DialogBox.
BOOL WINAPI EndDialog(HWND hw, int result)
6. Створення діалогового додатка
Andrey Gladky
KspDevelop@gmail.co
m 6
Немодального діалогове вікно з'являється поверх батьківського
вікна, але не блокує його. Програма сама відповідає за
відображення/приховування вікна (за допомогою стилю
WS_VISIBLE і функції ShowWindow). Повідомлення для
немодального діалогового вікна потрапляють в основну чергу
повідомлень програми. Щоб ці повідомлення були коректно
оброблені, слід включити в цикл обробки повідомлень виклик
функції:
Немодальне діалогове вікно знищується, якщо знищується його
батьківське вікно. У всіх інших випадках програма повинна
сама дбати про знищення немодального діалогового вікна,
використовуючи виклик:
BOOL WINAPI IsDialogMessage(HWND hwDlg, MSG *lpMsg)
BOOL WINAPI DestroyWindow(HWND hw)