Subclassing вікна

До підкласу зразок вікна SetWindowLong функцію і вказати дескриптор вікна до підкласу GWL_WNDPROC прапор і вказівник до підкласу процедури. SetWindowLong повертає вказівник до початкового вікна процедури; Використовуйте вказівник передати повідомлення до початкового порядку. Процедура вікно підкласу повинні функція CallWindowProc для проведення переговорів з оригінального вікна.

Наведений нижче приклад показує, як до підкласу екземпляр правки керування в діалоговому вікні. Підкласу вікно процедура дозволяє редагувати елемент керування отримувати всі клавіатури, у тому числі на ввід та клавіші tab, коли елемент керування має фокус вводу.

WNDPROC wpOrigEditProc; 
 
LRESULT APIENTRY EditBoxProc (
    HWND hwndDlg, 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 (hwndEdit, GWL_WNDPROC, wpOrigEditProc (ДОВГИЙ)); 
            / / / / Продовжити процес очищення. 
            / / Перерва; 
    } Повертає FALSE; 
        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