Partilhar via


Mapas de mensagens derivadas

Durante o tratamento de mensagens, verificar o mapa de mensagens de uma classe não é o fim da história do mapa de mensagens. O que acontece se a classe CMyView (derivada de CView) não tiver nenhuma entrada correspondente para uma mensagem?

Tenha em mente que CView, a classe base de CMyView, é derivada, por sua vez, de CWnd. Assim CMyViewé um CView e é um CWnd. Cada uma dessas classes tem seu próprio mapa de mensagens. A figura abaixo mostra a relação hierárquica das classes, mas tenha em mente que um CMyView objeto é um único objeto que tem as características de todas as três classes.

Diagrama mostrando a hierarquia de um modo de exibição.
Uma hierarquia de visualização

Se uma mensagem não puder ser correspondida no mapa de mensagens da classe CMyView, a estrutura também pesquisará o mapa de mensagens de sua classe base imediata. A BEGIN_MESSAGE_MAP macro no início do mapa de mensagens especifica dois nomes de classe como seus argumentos:

BEGIN_MESSAGE_MAP(CMyView, CView)

O primeiro argumento nomeia a classe à qual o mapa de mensagens pertence. O segundo argumento fornece uma conexão com a classe base imediata, neste caso CView, para que a estrutura também possa pesquisar seu mapa de mensagens.

Os manipuladores de mensagens fornecidos em uma classe base são, portanto, herdados pela classe derivada. Isso é muito semelhante às funções normais de membro virtual sem a necessidade de tornar virtuais todas as funções de membro do manipulador.

Se nenhum manipulador for encontrado em qualquer um dos mapas de mensagem de classe base, o processamento padrão da mensagem será executado. Se a mensagem for um comando, a estrutura a encaminha para o próximo destino de comando. Se for uma mensagem padrão do Windows, a mensagem é passada para o procedimento de janela padrão apropriado.

Para acelerar a correspondência de mapa de mensagens, a estrutura armazena em cache correspondências recentes com base na probabilidade de receber a mesma mensagem novamente. Uma consequência disso é que a estrutura processa mensagens não tratadas de forma bastante eficiente. Os mapas de mensagens também são mais eficientes em termos de espaço do que as implementações que usam funções virtuais.

Ver também

Como o Framework pesquisa mapas de mensagens