Bilden von Unterklassen eines Fensters

Unterklasse eine Instanz eines Fensters rufen Sie die Funktion SetWindowLong , und geben Sie dem Handle für das Fenster, Unterklasse, die GWL_WNDPROC-Flag und einen Zeiger auf die Unterklasse-Prozedur. SetWindowLong gibt einen Zeiger an die ursprüngliche Fensterprozedur; Verwenden Sie diesen Zeiger zum Weiterleiten von Nachrichten an die ursprüngliche Prozedur. Die Fensterprozedur Unterklasse muss die CallWindowProc -Funktion verwenden, um die ursprüngliche Fensterprozedur anzurufen.

Das folgende Beispiel zeigt, wie Unterklassen Steuerelements eine Instanz einer Bearbeitung in einem Dialogfeld angezeigt. Die Fensterprozedur Unterklasse ermöglicht das Edit-Steuerelement zu erhalten alle Tastatur-Eingaben, einschließlich die EINGABETASTE und Tab-Tasten, wenn das Steuerelement den Eingabefokus besitzt.

WNDPROC WpOrigEditProc; 
 
LRESULT APIENTRY EditBoxProc)
    HWND HwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND HwndEdit; 
 
    Switch(uMsg) {case WM_INITDIALOG: / / Retrieve das Handle für das Bearbeitungssteuerelement. 
            HwndEdit = GetDlgItem (HwndDlg, ID_EDIT); 
 
            / / Unterklasse Edit control. 
            WpOrigEditProc = (WNDPROC) SetWindowLong (HwndEdit, GWL_WNDPROC, (lange) EditSubclassProc); 
            / / / / Die Initialisierungsprozedur weiter. 
            / / return TRUE; 
 
        Case WM_DESTROY: / / die Unterklasse aus das Edit-Steuerelement zu entfernen. 
            SetWindowLong (HwndEdit, GWL_WNDPROC, (lange) WpOrigEditProc); 
            / / / / Das Bereinigung-Verfahren weiter. 
            / / Pause; 
    } return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} / / Unterklasse Verfahren LRESULT APIENTRY EditSubclassProc ()
    HWND Hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {Wenn (uMsg == WM_GETDLGCODE) return DLGC_WANTALLKEYS; 
 
    Rückkehr CallWindowProc (WpOrigEditProc, Hwnd, uMsg, wParam, lParam); 
} 

 

Index