Se ini?ializează o casetă de Dialog

Ini?ializa?i în caseta de dialog și conținutul său în timp ce mesajul WM_INITDIALOG de prelucrare. Sarcina cea mai comună este să inițializeze controalele pentru a reflecta setările curente pentru caseta de dialog. O altă activitate comună este centrul o casetă de dialog pe ecran sau în fereastra sa proprietar. Este o sarcină utilă pentru unele casete de dialog pentru a seta focalizarea intrare la un anumit control, mai degrabă decât acceptă focalizarea intrare implicită.

În exemplul următor, procedura de caseta de dialog centre din caseta de dialog și setează focalizarea intrare în timp ce mesajul WM_INITDIALOG de prelucrare. Pentru a centra din caseta de dialog, procedura preia dreptunghiuri fereastră din caseta de dialog și fereastra proprietar și calculează o nouă poziție pentru caseta de dialog. Pentru a seta focalizarea intrare, procedura verifică parametrul wParam pentru a determina identificatorul de concentrarea intrare implicită:

HWND hwndOwner; 
RECT rc, rcDlg, rcOwner; 
 
    caz WM_INITDIALOG: / / Get proprietarul fereastră și dialog box dreptunghiuri. 
 
        Dacă ((hwndOwner = GetParent(hwndDlg)) == NULL) {}
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (hwndOwner, amp; rcOwner); 
        GetWindowRect (hwndDlg, & rcDlg); 
        CopyRect (rc, & rcOwner); 
 
         / / Compensa proprietarul și dreptunghiuri caseta de dialog astfel încât / / dreapta și jos valorile reprezintă lățimea și / / înălțime și apoi offset proprietarul din nou să se debaraseze / / spațiu de caseta de dialog. 
 
        OffsetRect (& rcDlg,-rcDlg.left, - rcDlg.top); 
        OffsetRect (& rc,-rc.left, - rc.top); 
        OffsetRect (& rc,-rcDlg.right, - rcDlg.bottom); 
 
         / / Postul este suma jumătate rămase / / spațiu și proprietarul lui original pozi?ia. 
 
        SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / ignoră dimensiunea argumentele SWP_NOSIZE); 
 
        Dacă (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            return FALSE; 
        } întoarce TRUE 

 

În declarațiile precedente, procedura utilizează funcția GetParent pentru a regăsi proprietarul fereastra mâner pentru o casetă de dialog. Funcția întoarce proprietarul fereastra mâner pentru casete de dialog, și ghidajul fereastra părinte pentru copil windows. Deoarece cererea poate crea o casetă de dialog care are nici un proprietar, procedura verifică ghidajul returnate și utilizează funcția GetDesktopWindow pentru a regăsi ghidajul de ferestre desktop, dacă este necesar. După calcularea noua poziție, procedura utilizează funcția SetWindowPos să mutați caseta de dialog, precizând valoarea HWND_TOP pentru a se asigura că caseta de dialog rămâne pe partea de sus a ferestrei proprietar.

Înainte de stabilirea de intrare se concentreze, procedura verifică identificatorul de control al se concentreze intrare implicită. Sistemul trece mâner fereastra se concentreze intrare implicită în parametrul wParam . GetDlgCtrlID funcția întoarce identificatorul de control identificate de mânerul fereastra. În cazul în care identificatorul nu corespunde identificatorului corectă, procedura utilizează funcția SetFocus pentru a seta focalizarea intrare. Funcția GetDlgItem este necesar pentru a regăsi ghidajul fereastra de comanda dorită.

Index