Initialisieren ein Dialogfeld

Sie initialisieren das Dialogfeld und dessen Inhalt während der Verarbeitung der Nachricht WM_INITDIALOG . Die häufigste Aufgabe ist es, die Steuerelemente entsprechend die aktuellen Einstellungen im Dialogfeld zu initialisieren. Eine andere gemeinsame Aufgabe ist es, ein Dialogfeld auf dem Bildschirm oder in seinem Besitzerfenster zu zentrieren. Eine nützliche Aufgabe für einige Dialogfelder ist, legen Sie den Eingabefokus auf ein bestimmtes Steuerelement, anstatt den Eingabefokus Standard akzeptieren.

Im folgenden Beispiel die Dialogfeldprozedur zentriert das Dialogfeld und setzt den Eingabefokus während der Verarbeitung der Nachricht WM_INITDIALOG. Um das Dialogfeld zentrieren, die Prozedur ruft die Rechtecke Fenster für das Dialogfeld und das Besitzerfenster und berechnet eine neue Position für das Dialogfeld. Legen Sie den Eingabefokus, überprüft die Prozedur den wParam -Parameter auf den Bezeichner der den Eingabefokus Standard bestimmen:

HWND HwndOwner; 
RECT rc, RcDlg, RcOwner; 
 
    Case WM_INITDIALOG: / / erhalten die Eigentümer Fenster und Dialogfeld Feld Rechtecke. 
 
        Wenn ((HwndOwner = GetParent(hwndDlg)) == NULL) {}
            HwndOwner = GetDesktopWindow(); 
        }

GetWindowRect (HwndOwner, Amp; RcOwner); 
        GetWindowRect (HwndDlg, & RcDlg); 
        CopyRect (rc & RcOwner); 
 
         / / Offset den Besitzer und Dialogfeld Feld Rechtecke so dass / / die Breite der rechten und unteren Werte und / / Höhe und dann Offset der Besitzer wieder zu verwerfen / / space im Dialogfeld aufgegriffen. 
 
        OffsetRect (& RcDlg,-rcDlg.left, -rcDlg.top); 
        OffsetRect (& Rc,-rc.left, -rc.top); 
        OffsetRect (& Rc,-rcDlg.right, -rcDlg.bottom); 
 
         / / Die neue Position ist die Summe der Hälfte der verbleibenden / / Raum und der Besitzer der ursprünglichen Position. 
 
        SetWindowPos (HwndDlg, HWND_TOP, rcOwner.left + (rc.right/2), rcOwner.top + (rc.bottom / 2), 0, 0, / / Größe Argumente ignoriert SWP_NOSIZE); 
 
        Wenn (GetDlgCtrlID((HWND) wParam)! = ID_ITEMNAME) {SetFocus (GetDlgItem (HwndDlg, ID_ITEMNAME)); 
            Return FALSE; 
        } TRUE zurück 

 

In der vorhergehenden Anweisungen verwendet die Prozedur die GetParent -Funktion zum Abrufen des Besitzer das Fensterhandle für ein Dialogfeld. Die Funktion gibt den Besitzer Fensterhandle für Dialogfelder und das übergeordnete Fensterhandle für untergeordnete Fenster. Da eine Anwendung ein Dialogfeld, die keine Besitzer hat erstellen kann, wird die Prozedur überprüft das zurückgegebene Handle und verwendet die Funktion GetDesktopWindow auf das desktop-Fenster-Handle abzurufen, falls erforderlich. Nach Berechnung der neuen Position, verwendet die Prozedur verschieben Sie im Dialogfeld angeben von des HWND_TOP-Wertes, um sicherzustellen, dass das Dialogfeld über das Besitzerfenster bleibt die SetWindowPos -Funktion.

Vor dem Festlegen des Eingabefokus, überprüft die Prozedur die Steuerelement-ID von den Eingabefokus Standard. Das System übergibt das Fensterhandle des Eingabefokus Standard in den wParam -Parameter. Die GetDlgCtrlID -Funktion gibt den Bezeichner für das Steuerelement identifiziert durch das Fensterhandle. Wenn der Bezeichner nicht die korrekte ID übereinstimmt, verwendet die Prozedur die SetFocus -Funktion, um den Eingabefokus festzulegen. Die Funktion GetDlgItem wird benötigt, um das Fensterhandle der das gewünschte Steuerelement abrufen.

Index