Compartilhar via


Mapas de mensagens (ATL)

Um mapa de mensagem associa uma função do manipulador com uma mensagem específica, um comando, ou uma notificação.Usando macros do mapa de mensagemde ATL, você pode especificar um mapa de mensagem para uma janela.Os procedimentos da janela em CWindowImpl, em CDialogImpl, e em CContainedWindowT direcionam as mensagens de uma janela para seu mapa de mensagem.

funções do manipulador de mensagem aceita um argumento adicional do tipo BOOL&.Esse argumento indica se uma mensagem foi processada, e é definida como TRUE por padrão.Uma função do manipulador pode então definir o argumento para FALSE para indicar que tratou a mensagem.Em esse caso, ATL continuará a procurar uma função do manipulador mais no mapa de mensagem.Definindo este argumento para FALSEprimeiro, você pode executar alguma ação em resposta a uma mensagem e então permitir o processamento padrão ou outra função do manipulador para o botão que manipula a mensagem.

Mapas encadeados de mensagem

ATL também permite que você encadee mapas de mensagem, que direciona tratamento de mensagem para um mapa de mensagem definida em outra classe.Por exemplo, você pode implementar tratamento de mensagem comuns em uma classe separada para fornecer um comportamento uniforme para todas as janelas que encadea a classe.Você pode encadear a uma classe base ou a um membro de dados de sua classe.

ATL também suporta encadeamento dinâmico, que permite que você encadee no mapa da mensagem de outro objeto em tempo de execução.Para implementar encadeamento dinâmico, você deve derivar sua classe de CDynamicChain.Declarar na macro de CHAIN_MSG_MAP_DYNAMIC no mapa de mensagem.CHAIN_MSG_MAP_DYNAMIC requer um número exclusivo que identifica o objeto e o mapa da mensagem que você está encadeando.Você deve definir esse valor exclusivo com uma chamada a CDynamicChain::SetChainEntry.

Você pode encadear a qualquer classe que declarar um mapa de mensagem, desde que a classe deriva de CMessageMap.CMessageMap permite que um objeto expõe seus mapeamentos de mensagem para outros objetos.Observe que CWindowImpl já deriva de CMessageMap.

Alternar mapas de mensagem

Finalmente, mapas alternativas de mensagem dos meios de ATL, declarados com a macro de ALT_MSG_MAP .Cada mapa alternativo de mensagem é identificada por um número exclusivo, que você passe a ALT_MSG_MAP.Usando alternativas mapas de mensagem, você pode manipular mensagens de várias janelas em um mapa.Observe que por padrão, CWindowImpl não usa mapeamentos alternativas de mensagem.Para adicionar esse suporte, substituir o método de WindowProc em seu CWindowImpl- classe derivada e chamar ProcessWindowMessage com o identificador do mapa de mensagem.

Consulte também

Referência

Implementando uma janela