Partilhar via


Mapas de mensagem derivados

Durante o tratamento de mensagens, verificar o próprio 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. Portanto CMyView é um CView e é um CWnd. Cada uma dessas classes tem seu próprio mapa de mensagens. A figura a seguir mostra a relação hierárquica das classes, mas tenha em mente que um objeto CMyView é um único objeto que tem as características das três classes.

Diagram showing the hierarchy of a view.
Hierarquia de visualização

Se uma mensagem não puder ser correspondida no mapa de mensagens da classe CMyView, a estrutura também pesquisa o mapa de mensagens de sua classe base imediata. A macroBEGIN_MESSAGE_MAP 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 pertence o mapa da mensagem. O segundo argumento oferece uma conexão com a classe base imediata, nesse 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 de membro virtual normais sem a necessidade de tornar todas as funções de membro do manipulador virtuais.

Se nenhum manipulador for encontrado em nenhum dos mapas de mensagens 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 será passada para o procedimento de janela padrão apropriado.

Para acelerar a correspondência do mapa de mensagens, a estrutura armazena em cache correspondências recentes com a probabilidade de receber a mesma mensagem novamente. Uma consequência é que a estrutura processa mensagens sem tratamento com bastante eficiência. Mapas de mensagens também são mais eficientes em espaço do que implementações que usam funções virtuais.

Confira também

Como o Framework pesquisa mapas de mensagem