Partilhar via


Manipuladores para mensagens do Windows padrão

Padrão manipuladores para mensagens do Windows padrão (WM _) são predefinidos na classe CWnd.A biblioteca de classes bases nomes para esses manipuladores no nome da mensagem.Por exemplo, o manipulador para o WM_PAINT mensagem declarada na CWnd como:

afx_msg void OnPaint();

O afx_msg palavra-chave sugere o efeito de C++ virtual palavra-chave, distinguindo os manipuladores de outros CWnd funções de membro.Observe, Entretanto, essas funções não são realmente virtuais; em vez disso, eles são implementados através de mapas de mensagem.Mapas de mensagem dependem somente macros de pré-processador padrão, não em quaisquer extensões de linguagem C++.O afx_msg palavra-chave resolve para espaço em branco após o pré-processamento.

Para substituir um manipulador definido na classe base, basta defina uma função com o protótipo mesmo em sua classe derivada e para fazer uma entrada de mapa da mensagem para o manipulador.O manipulador "substitui" qualquer manipulador de mesmo nome em qualquer uma das classes base da classe.

Em alguns casos, o manipulador deve chamar o manipulador substituído na classe base para a classe base (s) e o Windows pode operar na mensagem.Onde você chamar o manipulador da classe base na sua substituição depende das circunstâncias.Às vezes, você deve chamar o manipulador da classe base primeiro e último às vezes.Às vezes você chamar o manipulador de classe base condicionalmente, se você escolher não manipular a mensagem você mesmo.Às vezes você deve chamar o manipulador de classe base e condicionalmente executar seu próprio código de manipulador, dependendo do valor ou estado retornado pelo manipulador de classe base.

Observação de cuidadoCuidado

Não é seguro modificar os argumentos passados para um manipulador, se você pretende passá-las para um manipulador de classe base.Por exemplo, você pode ficar tentado a modificar o nChar argumento de OnChar manipulador (converter para maiúsculas, por exemplo).Esse comportamento é obscuro, mas se você precisar realizar esse efeito, use o CWnd função de membro SendMessage em vez disso.

Como determinar o modo adequado para substituir uma determinada mensagem?Quando a janela Propriedades grava o esqueleto da função de manipulador para uma determinada mensagem — uma OnCreate manipulador WM_CREATE, por exemplo — ele sketches no formulário da função de membro substituído recomendado.O exemplo a seguir recomenda que o manipulador primeiro chamar o manipulador de classe base e continuar apenas na condição de que ele não retornará – 1.

int CMyView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
   if (CFormView::OnCreate(lpCreateStruct) == -1)
      return -1;

   // TODO:  Add your specialized creation code here

   return 0;
}

Por convenção, os nomes desses manipuladores começam com o prefixo "On". Alguns desses manipuladores de levam sem argumentos, enquanto outros levar vários.Alguns também têm um tipo de retorno diferente de void.Os manipuladores padrão para todas as WM _ mensagens estão documentadas na Referência MFC como funções de membro da classe CWnd cujos nomes começam com "On". As declarações de função de membro em CWnd prefixadas com afx_msg.

Consulte também

Conceitos

Declaração de funções do manipulador de mensagem