Manipuladores de mensagens padrão do Windows

Manipuladores padrão para mensagens padrão do Windows (WM_) predefinidos na classe CWnd. A biblioteca de classes baseia nomes para esses manipuladores no nome da mensagem.Por exemplo, o manipulador para o WM_PAINT declarada na mensagem CWnd sistema autônomo:

afx_msg void OnPaint();

The afx_msg palavra-chave sugere o efeito do C++ virtual palavra-chave por distinção entre os manipuladores de outros CWnd funções de membro. Observe, entretanto, essas funções não estão realmente virtual; em vez disso, eles são implementados por meio de mapas de mensagem.Mapas de mensagem dependem somente macros de pré-processador padrão, não em todas as extensões para a linguagem C++.The afx_msgpalavra-chave resolve para espaço em branco após a pré-processamento.

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

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

Cuidado:

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

Como você determina o modo adequado para substituir uma determinada mensagem?Quando a janela Propriedades grava o esqueleto da função de manipulador para uma determinada mensagem — um OnCreate manipulador para 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 telefonar o manipulador de classe base e prossiga somente 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 de começam com o prefixo "On". Alguns desses manipuladores de receber sem argumentos, enquanto outros levar vários.Alguns também tem um tipo de retorno Outros que void. sistema autônomo manipuladores padrão para todos sistema autônomo WM_ mensagens estão documentadas no Referência da MFC sistema autônomo funções de membro de classe CWndcujos nomes começam com "On". As declarações de função de membro em CWnd são prefixados com afx_msg.

Consulte também

Conceitos

Declarando manipulador de mensagens funções