Ініціалізація діалогового вікна

Час ініціалізації діалогового вікна та її вміст під час обробки повідомлення 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 функції необхідні для отримання потрібного елемента керування, дескриптор вікна.

Index