Inicjowanie okno dialogowe

Okno dialogowe i jego zawartość są zainicjować podczas przetwarzania komunikatu WM_INITDIALOG . Najbardziej typowe zadanie ma zainicjować kontroli w celu uwzględnienia bieżących ustawień okna dialogowego. Inne typowe zadanie jest Wyśrodkuj okno dialogowe na ekranie lub w jego oknie właściciela. Zadanie użyteczne dla niektórych oknach dialogowych jest ustawiony fokus do danego formantu zamiast zaakceptować domyślne fokus.

W poniższym przykładzie procedura pole dialogowe Wyśrodkowuje okno dialogowe i ustawia fokus podczas przetwarzania komunikatu WM_INITDIALOG. Aby wyśrodkować okno dialogowe, procedury pobiera prostokąty okna w oknie i oknie właściciela i oblicza nowe położenie okna dialogowego. Aby ustawić fokus, procedury kontroli parametru wParam w celu określenia identyfikatora fokus domyślne:

HWND hwndOwner; 
RECT rc, rcDlg, rcOwner; 
 
    Sprawa WM_INITDIALOG: / / Get właściciela oknie i oknie dialogowym prostokąty pole. 
 
        Jeżeli ((hwndOwner = GetParent(hwndDlg)) == NULL) {}
            hwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (hwndOwner, amp; rcOwner); 
        GetWindowRect (hwndDlg & rcDlg); 
        CopyRect (rc & rcOwner); 
 
         / / Przesunięcie właściciela i okna dialogowe prostokąty pole tak, aby / / prawej i dolnej wartości reprezentują szerokość i / / wysokość, a następnie przesunięcie właściciela ponownie, aby odrzucić / / SPACJA, podjętych przez okno dialogowe. 
 
        OffsetRect (& rcDlg,-rcDlg.left, rcDlg.top); 
        OffsetRect (& rc,-rc.left, rc.top); 
        OffsetRect (& rc,-rcDlg.right, rcDlg.bottom); 
 
         / / Nowe położenie jest sumą połowa pozostałych / / miejsca i właściciela na oryginalnym położeniu. 
 
        SetWindowPos (hwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / ignoruje wielkość argumenty SWP_NOSIZE); 
 
        Jeżeli (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (hwndDlg, ID_ITEMNAME)); 
            return FALSE; 
        } zwróci TRUE 

 

W poprzednim sprawozdaniu procedura używa funkcji GetParent do pobrania właściciela dojście do okna dialogowego. Funkcja zwraca właściciela, uchwyt okna dla okien dialogowych i uchwyt okna nadrzędnego dla okien podrzędnych. Ponieważ aplikacja może utworzyć okno dialogowe, które ma bez właściciela, procedury kontroli zwracane dojście i używa funkcji GetDesktopWindow do pobrania dojście do okna pulpitu, jeśli jest to konieczne. Po obliczania położenia, procedura używa funkcji SetWindowPos aby przenieść okno dialogowe, określając wartość HWND_TOP, aby zapewnić, że okno dialogowe pozostaje w górnej części okna właściciela.

Przed ustawieniem fokus, procedura sprawdza identyfikator formantu fokus domyślne. System przechodzi uchwyt okna fokus domyślne w parametrze wParam . Funkcja GetDlgCtrlID zwraca identyfikator formantu, identyfikowane przez dojście do okna. Jeśli identyfikator nie pasuje do prawidłowego identyfikatora, procedura używa funkcji SetFocus ustawić fokus. Funkcja GetDlgItem jest wymagane do pobierania uchwyt okna żądaną sterującą.

Index