Створення немодальною діалоговому вікні за допомогою функції CreateDialog , вказавши ідентифікатор або ім'я діалоговому вікні шаблон ресурсу та адресу діалоговому вікні процедури. CreateDialog навантажень шаблон, створює діалогового вікна та за бажанням відображає його. Ваша заявка несе відповідальність за отримання й диспетчерських повідомлення для вводу користувача у діалоговому вікні порядку.
У наведеному нижче прикладі, програма відображає діалогове вікно немодальною — якщо вона ще не відображено — коли користувач вибирає команду Перейти з меню застосунків. Діалогове вікно містить поля, прапорці та кнопки ОК і скасувати. Діалоговому вікні шаблон ресурс у виконуваного файлу програми і має ідентифікатор ресурсів DLG_GOTO. Користувач входить номер рядка в елементі керування редагування і перевіряє прапорець, щоб указати, що номер рядка по відношенню до поточного рядка. Керування ідентифікаторами є ID_LINE, ID_ABSREL, IDOK і IDCANCEL.
Заяви в першій частині приклад створити діалогове вікно немодальною. Ці заяви, у вікні порядок головне вікно програми, створити діалогове вікно коли вікно процедура отримує WM_COMMAND повідомлення мають ідентифікатор команди IDM_GOTO, але тільки якщо глобальна змінна hwndGoto ще не містить неприпустимий дескриптор. Друга частина прикладом є основний цикл програми. Цикл включає в себе функцію IsDialogMessage , щоб переконатися, що користувач може використовувати інтерфейс клавіатура діалоговому вікні в цьому немодальною діалоговому вікні. Третя частина прикладом є діалоговому вікні процедури. Процедура вилучає вміст редагування і прапорець, коли користувач вибирає кнопки ОК. Процедура руйнує діалогового вікна, коли користувач вибирає "Скасувати".
HWND-hwndGoto = NULL; / / вікно впоратися з діалогового вікна.
.
.
справа WM_COMMAND: перемикання (LOWORD(wParam)) {випадку IDM_GOTO: Якщо (!IsWindow(hwndGoto)) {hwndGoto = CreateDialog (hinst, MAKEINTRESOURCE(DLG_GOTO), hwnd, GoToProc (DLGPROC));
ShowWindow (hwndGoto, SW_SHOW);
}
break;
} повернення 0 L
У попередні заяви, CreateDialog називають лише, якщо hwndGoto не не містять дескриптор дійсний вікна. Це гарантує, що додаток не відображає два діалогових вікнах одночасно. Підтримати цей метод перевірки, процедура діалогове вікно необхідно встановити hwndGoto до NULL коли вона руйнує діалогового вікна.
Повідомлення петлі для застосування складається з такі заяви:
(GetMessage (amp; msg, NULL, NULL, NULL)) в той час як {якщо (!IsWindow(hwndGoto) | | !IsDialogMessage (hwndGoto & msg)) {TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Циклу перевіряє дескриптор вікна для діалогового вікна і тільки дзвінків IsDialogMessage функцію, якщо маркер, є дійсним. IsDialogMessage тільки процеси повідомлення, якщо він належить до діалогового вікна. В іншому випадку вона повертає FALSE і петлі розсилок повідомлення, відповідне вікно.
Такі заяви визначення процедури діалоговому вікні:
int iLine; / / отримує рядка номер BOOL fRelative; / / отримує статус прапорець BOOL зворотного ВИКЛИКУ GoToProc (HWND hwndDlg, UINT повідомлення, WP&ARAM wParam, LPARAM lParam) {BOOL fError;
перемикач (повідомлення) {випадку WM_INITDIALOG: CheckDlgButton (hwndDlg, ID_ABSREL, fRelative);
повертає TRUE;
справа WM_COMMAND: перемикання (LOWORD(wParam)) {випадку IDOK: fRelative = IsDlgButtonChecked (hwndDlg, ID_ABSREL);
iLine = GetDlgItemInt (hwndDlg, ID_LINE, amp; fError, fRelative);
Якщо (fError) {MessageBox (hwndDlg, SZINVALIDNUMBER, SZGOTOERR, MB_OK);
SendDlgItemMessage (hwndDlg, ID_LINE, EM_SETSEL, 0, L-1);
} інше / / повідомити власника вікном для перевезення / / команду.
повертає TRUE;
справа IDCANCEL: DestroyWindow(hwndDlg);
hwndGoto = NULL;
повертає TRUE;
}} Повертає FALSE;
}
В попередніх заявах процедура процесів WM_INITDIALOG та WM_COMMAND повідомлення. Під час обробки WM_INITDIALOG процедура ініціалізує прапорець на проходження поточного значення глобальна змінна fRelative CheckDlgButton. Процедура повертає TRUE прямого система встановити за замовчуванням фокус вводу.
Під час обробки WM_COMMAND, процедура закриття діалогового вікна, лише якщо користувач вибирає "Скасувати" —, кнопки, які мають ідентифікатор IDCANCEL. Процедуру необхідно викликати DestroyWindow , щоб закрити діалогове вікно немодальною. Зверніть увагу, що процедура також встановлює змінну hwndGoto NULL, щоб переконатися, що інші заяви, які залежать від цю змінну правильно працювати.
Якщо користувач вибирає кнопки ОК, процедура отримує поточний стан прапорця і призначає його fRelative змінної. Потім він використовує змінну отримати номер рядка з редагувати елемент керування. GetDlgItemInt перетворює текст в елементі керування редагування в ціле число. Значення fRelative визначає, чи функцію інтерпретує номер як підписаних або непідписаних значення. Якщо редагувати елемент керування текст не є припустимим числом, GetDlgItemInt встановлює значення змінної fError ненульовим. Процедура перевіряє це значення, щоб визначити, чи потрібно відображати повідомлення про помилку або виконати команду. У разі виникнення помилки діалоговому вікні порядок надсилає повідомлення для редагування елемента керування, направляючи її, щоб виділити текст в елементі керування, так що користувач може легко замінити. Якщо GetDlgItemInt не повертає помилку, процедури можна виконати потрібну команду, сам або надіслати повідомлення до власника вікна, направляючи її виконати команду.