Для подкласса экземпляр окна необходимо вызвать функцию 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);
}