Mapas de mensajes

Un mapa de mensajes asocia una función de controlador con un mensaje concreto, comando o notificación. Mediante el uso de ATL mensaje asignar macros, puede especificar un mapa de mensajes para una ventana. Los procedimientos de ventana de CWindowImpl, CDialogImply CContainedWindow dirigen mensajes de la ventana a su mapa de mensajes.

Las funciones de controlador de mensaje aceptan un argumento adicional del tipo BOOLamp; . Este argumento indica si un mensaje se ha procesado, y se establece en TRUE por defecto. Una función de controlador, a continuación, puede establecer el argumento F&ALSE para indicar que no ha manejado un mensaje. En este caso, ATL continuará en busca de una función de controlador más en el mapa de mensajes. Al establecer este argumento en FALSE , puede primero realizar alguna acción en respuesta a un mensaje y, a continuación, permitir el procesamiento predeterminado o otra función de controlador a fin de controlar el mensaje.

ATL también permite mapas de mensajes de cadena, que dirige el tratamiento a un mapa de mensajes definido en otra clase de mensajes. Por ejemplo, puede aplicar mensaje común manejo en una clase independiente para proporcionar un comportamiento uniforme para todas las ventanas del encadenamiento de esa clase. Cadena de una clase base o a un miembro de datos de su clase.

ATL también admite el encadenamiento dinámico, que permite a cadena al mapa de mensajes del otro objeto en tiempo de ejecución. Para implementar el encadenamiento dinámico, debe derivar la clase de CDynamicChain. A continuación, declarar la macro CHAIN_MSG_MAP_DYNAMIC en el mapa del mensaje. CHAIN_MSG_MAP_DYNAMIC requiere un número único que identifica el objeto y el mapa de mensajes que son encadenamiento. Debe definir este valor único a través de una llamada a CDynamicChain::SetChainEntry.

Puede encadenar a cualquier clase que declara un mapa de mensajes, siempre la clase deriva de CMessageMap. CMessageMap permite que un objeto exponer sus mapas de mensajes a otros objetos. Tenga en cuenta que CWindowImpl ya deriva de CMessageMap.

Por último, ATL admite mapas de mensajes alternativos, declaradas a la macro ALT_MSG_MAP . Cada mapa de mensajes alternativos se identifica mediante un número único, que pasa a ALT_MSG_MAP. Mediante mensaje alterno mapas, puede controlar los mensajes de varias ventanas en un mapa. Tenga en cuenta que de forma predeterminada, CWindowImpl no utiliza mapas de mensajes alternativos. Para agregar este apoyo, reemplace el método WindowProc en tu CWindowImpl-clase derivada y llamar a ProcessWindowMessage con el identificador de mensaje mapa.

Index