Час ініціалізації діалогового вікна та її вміст під час обробки повідомлення WM_INITDIALOG . Найбільш поширені завдання – ініціалізувати елементи керування для відображення поточних параметрів діалоговому вікні. Інший загальні завдання-Центру діалогове вікно на екрані або в межах його вікна власника. Корисні завдання для деяких діалогових вікнах-встановити фокус вводу до певного елемента керування, а не приймати фокус вводу за промовчанням.
У наведеному нижче прикладі діалоговому вікні порядок центри діалогового вікна і встановлює фокус вводу під час обробки повідомлення WM_INITDIALOG. Центр діалогового вікна, процедура оновлює вікно прямокутники для діалогового вікна та вікна власника і обчислює нове місце для діалогового вікна. Щоб налаштувати фокус вводу, процедура перевіряє wParam параметра, щоб визначити ідентифікатор фокус вводу за промовчанням:
HWND hwndOwner;
RECT rc, rcDlg, rcOwner;
справа WM_INITDIALOG: / / отримати власник вікна та діалоговому вікні прямокутники.
Якщо ((hwndOwner = GetParent(hwndDlg)) = = NULL) {
hwndOwner = GetDesktopWindow();
}
GetWindowRect (hwndOwner, amp rcOwner);
GetWindowRect (hwndDlg і rcDlg);
CopyRect (та rc та rcOwner);
/ / Компенсувати власника та діалоговому вікні прямокутники, щоб / / справа і знизу значень ширини і / / висота а потім зсув власником ще раз, щоб скасувати / / космос, прийняті діалогового вікна.
OffsetRect (& rcDlg,-rcDlg.left, - rcDlg.top);
OffsetRect (& rc,-rc.left, - rc.top);
OffsetRect (& rc,-rcDlg.right, - rcDlg.bottom);
/ / Нове положення є сума половину, що залишилися / / простору і власника вихідного розташування.
SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / ігнорує розмір аргументів SWP_NOSIZE);
Якщо (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME));
Повертає FALSE;
} повернути TRUE
В попередніх заявах процедура функція GetParent отримати дескриптор вікна власника для діалогове вікно. Функція повертає власник дескриптор вікна для діалогових вікон і батьківський дескриптор вікна для дитини windows. Тому що заявку можна створити діалоговому вікні, яке має не власник, процедура перевірки повернутого дескриптора і функція GetDesktopWindow , щоб отримати дескриптор робочого вікна, якщо це необхідно. Після розрахунку нове положення, процедура функція SetWindowPos , щоб пересунути діалог, зазначення значення HWND_TOP, щоб гарантувати, що діалогове вікно залишається у верхній частині вікна власник.
Перед установкою фокус вводу, процедура перевіряє ідентифікатор елемента, з фокус вводу за промовчанням. Система проходить дескриптор вікна за замовчуванням фокус вводу в параметрі wParam . Функція GetDlgCtrlID повертає ідентифікатор елемента керування, визначені дескриптор вікна. Якщо ідентифікатор не відповідає правильний ідентифікатор, процедура функція SetFocus , щоб перевести фокус вводу. GetDlgItem функції необхідні для отримання потрібного елемента керування, дескриптор вікна.