Delklassifisere et vindu

Kalle funksjonen SetWindowLong underklasse en forekomst av et vindu, og angi håndtaket til vinduet å underklasse flagget GWL_WNDPROC og en peker til prosedyren underklasse. SetWindowLong returnerer en peker til den opprinnelige vindusprosedyre; Bruk denne pekeren til å sende meldinger til den opprinnelige prosedyren. Vindusprosedyre underklasse må bruke CallWindowProc -funksjonen til å kalle den opprinnelige vindusprosedyre.

Eksemplet nedenfor viser hvordan til underklasse en forekomst av en Rediger kontroll i en dialogboks. Vindusprosedyre underklasse aktiverer redigeringskontrollen å motta alle tastatur input, inkludert enter og tab-tasten, når kontrollen har fokus inndata.

WNDPROC wpOrigEditProc; 
 
EditBoxProc () ikke hente LRESULT APIENTRY
    HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit; 
 
    Switch(uMsg) {case WM_INITDIALOG: / / hente referansen til edit-kontrollen. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / Underklasse Rediger kontroll. 
            wpOrigEditProc = (WNDPROC), SetWindowLong (hwndEdit, GWL_WNDPROC, (lang) EditSubclassProc); 
            / / / / Fortsette initialiseringsprosedyren. 
            / / return TRUE; 
 
        Case WM_DESTROY: / / Fjern underklassen fra redigeringskontrollen. 
            SetWindowLong (hwndEdit, GWL_WNDPROC, (lang) wpOrigEditProc); 
            / / / / Fortsette prosedyren opprydding. 
            / / break; 
    } return FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} / / Underklasse prosedyren ikke hente LRESULT APIENTRY EditSubclassProc ()
    HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {hvis (uMsg == WM_GETDLGCODE) return DLGC_WANTALLKEYS; 
 
    gå tilbake til CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 

 

Index