Subclassing חלון

כדי לתתי מופע של חלון, לפונקציה SetWindowLong וציין נקודת האחיזה לחלון כדי לתתי הדגל GWL_WNDPROC ומצביע להליך מחלקת משנה. SetWindowLong מחזירה מצביע לשגרה החלון המקורי; השתמש במצביע זה להעברת מסרים ההליך המקורי. ההליך חלון לתתי עליך להשתמש בפונקציה CallWindowProc כדי לקרוא לפרוצדורה החלון המקורי.

הדוגמה הבאה מציגה כיצד כדי לתתי לשלוט מופע של עריכה בתיבת דו-שיח. ההליך חלון לתתי מאפשר לפקד העריכה לקבל את כל המקשים קלט, כולל enter ומקש tab, בכל פעם הפקד שהמוקד קלט.

WNDPROC wpOrigEditProc; 
 
(EditBoxProc LRESULT APIENTRY
    HwndDlg HWND / UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit; 
 
    switch(uMsg) {מקרה WM_INITDIALOG: / / לאחזר את נקודת האחיזה כדי לפקד העריכה. 
            hwndEdit = GetDlgItem (hwndDlg, ID_EDIT); 
 
            / / מחלקת משנה ערוך לשלוט. 
            wpOrigEditProc = (WNDPROC) SetWindowLong (hwndEdit, GWL_WNDPROC, EditSubclassProc (ארוכה)); 
            / / / / להמשיך את הליך האתחול. 
            / / מחזירה TRUE; 
 
        מקרה WM_DESTROY: / / להסיר את מחלקת משנה לפקד העריכה. 
            SetWindowLong (wpOrigEditProc (ארוכה) hwndEdit, GWL_WNDPROC,); 
            / / / / להמשיך את הליך ניקוי. 
            / / לשבור; 
    } להחזיר שקר; 
        UNREFERENCED_PARAMETER(lParam); 
} / / מחלקת משנה הליך LRESULT APIENTRY EditSubclassProc (
    Hwnd HWND / UINT uMsg, WPARAM wParam, LPARAM lParam) {אם (uMsg = = WM_GETDLGCODE) להחזיר DLGC_WANTALLKEYS; 
 
    להחזיר את CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam); 
} 

 

Index