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);
}