Subclassificação uma janela

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); 
} 

 

Index