Een venster subclassing

Subklasse een exemplaar van een venster, de SetWindowLong functie aanroepen en geeft u de ingang voor het venster tot subklasse de GWL_WNDPROC vlag en een verwijzing naar de procedure van de subklasse. SetWindowLong haalt u een aanwijzer naar het oorspronkelijke venster procedure; Gebruik deze aanwijzer om het doorgeven van berichten aan de oorspronkelijke procedure. De subklasse venster procedure moet de functie CallWindowProc gebruiken om de oorspronkelijke venster procedure te roepen.

Het volgende voorbeeld ziet u hoe een exemplaar van een bewerking voor subklasse controle in een dialoogvenster. De subklasse venster procedure schakelt het besturingselement bewerken ontvangt alle toetsenbordinvoer, met inbegrip van de enter en tab toetsen, wanneer het besturingselement de invoerfocus heeft.

WNDPROC wpOrigEditProc; 
 
LRESULT APIENTRY EditBoxProc)
    HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit; 
 
    switch(uMsg) {geval WM_INITDIALOG: / / ophalen van de ingang naar het besturingselement voor bewerking. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / Subklasse de edit control. 
            wpOrigEditProc = (WNDPROC) SetWindowLong (hwndEdit, GWL_WNDPROC, EditSubclassProc (lange)); 
            / / / / De initialisatieprocedure voortzetten. 
            / / return TRUE; 
 
        Case WM_DESTROY: / / de subklasse verwijderen uit het besturingselement bewerken. 
            SetWindowLong (hwndEdit, GWL_WNDPROC, (lange) wpOrigEditProc); 
            / / / / De cleanup procedure voortzetten. 
            / / breken; 
    } return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} / / Subklasse procedure LRESULT APIENTRY EditSubclassProc ()
    HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {als (uMsg == WM_GETDLGCODE) return DLGC_WANTALLKEYS; 
 
    terug CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 
 

Index