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.