Subclassing okno

Podtrieda inštanciu okno volať funkciu SetWindowLong a určite rúčka okno podtriedy GWL_WNDPROC vlajku a ukazovateľ postupu podtriedy. SetWindowLong vracia ukazovateľ na pôvodné okno postupu; použite tento ukazovateľ preniesť správy na pôvodný postup. Podtrieda okno postup musí využiť funkciu CallWindowProc volanie Pôvodná okno postup.

Nasledujúci príklad zobrazuje, ako podtrieda inštanciu upraviť ovládača v dialógovom okne. Podtrieda okno postup umožňuje upraviť kontrolu prijímať všetky klávesnice vstup, vrátane klávesy enter alebo tab kedykoľvek kontrole vstupnej zameranie.

WNDPROC wpOrigEditProc; 
 
LRESULT APIENTRY EditBoxProc (
    HWND hwndDlg, UINT uMsg WPARAM wParam LPARAM lParam) {HWND hwndEdit; 
 
    switch(uMsg) {prípad WM_INITDIALOG: / / získať popisovač upraviť kontroly. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / Podtriedy upraviť kontroly. 
            wpOrigEditProc = (WNDPROC) SetWindowLong (hwndEdit, GWL_WNDPROC, (dlhou) EditSubclassProc); 
            / / / / Pokračovať v postupe inicializácie. 
            / / Vráti hodnotu pravda; 
 
        prípad WM_DESTROY: / / odstrániť podtriedy upraviť kontroly. 
            SetWindowLong (hwndEdit, GWL_WNDPROC, (dlhou) wpOrigEditProc); 
            / / / / Pokračovať v postupe čistenie. 
            / / prerušiť; 
    } Vráti FALSE; 
        UNREFERENCED_PARAMETER(lParam); 
} / / Podtriedy postup LRESULT APIENTRY EditSubclassProc (
    HWND hwnd, UINT uMsg WPARAM wParam LPARAM lParam) {Ak (uMsg == WM_GETDLGCODE) návrat DLGC_WANTALLKEYS; 
 
    návrat CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 
 

Index