Subclassing o fereastră

Pentru subclasa o instanță a unei ferestre, apela funcția SetWindowLong și specificați ghidajul în fereastra subclasă GWL_WNDPROC de pavilion și un indicator spre procedura subclasă. SetWindowLong întoarce un pointer la regimul fereastra inițială; Utilizați acest indicator pentru a trece mesaje la regimul original. Subclasa fereastra procedura trebuie să utilizați funcția CallWindowProc pentru a apela procedura fereastra original.

Următorul exemplu arată cum să subclasă un exemplu de o editare controlul din caseta de dialog. Procedura subclasă fereastra permite controlul Editare pentru a primi toate tastatură de intrare, inclusiv tastele enter și fila, ori de câte ori control deține focalizarea intrare.

WNDPROC wpOrigEditProc; 
 
(EditBoxProc) LRESULT APIENTRY
    HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit; 
 
    Switch(uMsg) {caz WM_INITDIALOG: / / regăsi ghidajul comanda editare. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / Subclasă editare de control. 
            wpOrigEditProc = SetWindowLong (WNDPROC) (hwndEdit, GWL_WNDPROC, EditSubclassProc (lung)); 
            / / / / Continue procedura de initializare. 
            / / întoarce TRUE; 
 
        caz WM_DESTROY: / / elimina subclasă din comanda editare. 
            SetWindowLong (hwndEdit, GWL_WNDPROC, wpOrigEditProc (lung)); 
            / / / / Continue procedura de curățire. 
            / / pauză; 
    } return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} / / Subclasă procedura LRESULT APIENTRY EditSubclassProc (
    HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {dacă (uMsg == WM_GETDLGCODE) return DLGC_WANTALLKEYS; 
 
    return CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 

 

Index