Создание подклассов окна

Для подкласса экземпляр окна необходимо вызвать функцию SetWindowLong и укажите дескриптор окна для подкласса GWL_WNDPROC флаг и указатель к процедуре подкласса. SetWindowLong возвращает указатель на исходную процедуру окна; для передачи сообщений в исходную процедуру используйте этот указатель. Подкласс процедуру окна необходимо использовать функцию CallWindowProc для вызова в исходную процедуру окна.

В следующем примере показано, как создать подкласс экземпляр редактирования управления в диалоговом окне. Подкласс окна процедура позволяет изменить элемент управления, получающий все клавиатуры, включая ввод и вкладка ключей, всякий раз, когда элемент управления имеет фокус ввода.

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, uMsg, wParam, hwnd, lParam); 
} 
 

Index