Para "subclasse" uma instância de uma janela, chamar o SetWindowLong função e especificar o identificador para a janela a subclasse a bandeira GWL_WNDPROC e um ponteiro para o procedimento subclasse. SetWindowLong retorna um ponteiro para o procedimento de janela original; Use esse ponteiro para transmitir mensagens para o procedimento original. O procedimento de janela de subclasse deve usar o CallWindowProc função para chamar o procedimento janela original.
O exemplo a seguir mostra como para "subclasse" uma instância de uma edição Controlar em uma caixa de diálogo. O procedimento de janela de subclasse permite que o Controlarar de editar receber todos os entrada do teclado, incluindo as teclas enter e tab, sempre que o controle tem o foco de entrada.
WNDPROC wpOrigEditProc;
LRESULT APIENTRY EditBoxProc (
HwndDlg HWND, UINT uMsg, WPARAM wParam, LPARAM lParam) {HWND hwndEdit;
Switch(uMsg) {case WM_INITDIALOG: / / recuperar o identificador para o Controlarar de editar.
hwndEdit = GetDlgItem (hwndDlg, ID_EDIT);
/ / Subclasse a editar Controlar.
wpOrigEditProc = (WNDPROC) SetWindowLong (hwndEdit, GWL_WNDPROC, EditSubclassProc (longo));
/ / / / Continuar o processo de inicialização.
/ / return TRUE;
caso WM_DESTROY: / / Remove a subclasse do Controlarar de Editarar.
SetWindowLong (hwndEdit, GWL_WNDPROC, wpOrigEditProc (longo));
/ / / / Continuar o procedimento de limpeza.
/ / quebrar;
} retornar FALSE;
UNREFERENCED_PARAMETER(lParam);
} / / Subclasse procedimento LRESULT APIENTRY EditSubclassProc (
HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {se (uMsg = = WM_GETDLGCODE) retornar DLGC_WANTALLKEYS;
retornar CallWindowProc (wpOrigEditProc, hwnd, uMsg, wParam, lParam);
}