Criando um procedimento de janela

O exemplo a seguir mostra a estrutura de um procedimento de janela típico. O procedimento janela usa o argumento de mensagem em uma instrução switch com mensagens individuais manipuladas pelas instruções separadas caso . Observe que cada caso retorna um valor específico para cada mensagem. Para mensagens que não processo, o procedimento janela chama o DefWindowProc função.

LRESULT CALLBACK MainWndProc (
    HWND hwnd, / / identificador para janela
    UINT uMsg, / / mensagem identificador
    WPARAM wParam, / / primeiro parâmetro da mensagem
    LPARAM lParam) / / segundo parâmetro message
{switch (uMsg) {case WM_CREATE: / / inicializar a janela. 
            return 0; 
 
        caso WM_PAINT: / / pintar a área cliente da janela. 
            return 0; 
 
        caso WM_SIZE: / / definir o tamanho e posição da janela. 
            return 0; 
 
        caso WM_DESTROY: / / limpar objetos de dados window-specific. 
            return 0; 
 
        / / / / Processo de outras mensagens. 
        / / default: retornar DefWindowProc (hwnd, uMsg, wParam, lParam); 
    } return 0; 
} 

 

O messageis WM_NCCREATE enviados apenas depois que a janela é criada, mas se um aplicativo responde a esta mensagem Retornando FALSE, falha na CreateWindowEx função. A mensagem WM_CREATE é enviada depois que sua janela já é criada.

WM_DESTROY mensagem é enviada quando a janela está prestes a ser destruído. O DestroyWindow função se encarrega de destruir qualquer janelas filho da janela que está sendo destruído. A mensagem WM_NCDESTROY é enviada imediatamente antes de uma janela é destruída.

Pelo menos, um procedimento janela deve processar o mensagem WM_PAINT para desenhar propriamente dito. Normalmente, ele deve tratar mensagens de mouse e teclado também. Consulte as descrições de mensagens individuais para determinar se seu procedimento janela deve lidar com eles.

Seu aplicativo pode chamar o DefWindowProc função como parte do processamento de uma mensagem. Nesse caso, o aplicativo pode modificar os parâmetros da mensagem antes de passar a mensagem para o DefWindowProcou ele pode continuar com o padrão de processamento depois de executar suas próprias operações.

Um procedimento caixa de diálogo recebe uma mensagem WM_INITDIALOG em vez de uma mensagem WM_CREATE e não transmitir mensagens não processadas para o DefDlgProc função. Caso contrário, um procedimento de caixa de diálogo é exatamente o mesmo que um procedimento de janela.

Index