Compartir a través de


Mapas de mensajes (ATL)

Un mapa de mensajes asocia una función de controlador con un mensaje, un comando o una notificación determinados. Mediante las macros de mapa de mensajes de ATL, puede especificar un mapa de mensajes para una ventana. Los procedimientos de ventana de CWindowImpl, CDialogImply CContainedWindowT dirigen los mensajes de una ventana a su mapa de mensajes.

Las funciones del controlador de mensajes aceptan un argumento adicional de tipo BOOL&. Este argumento indica si se ha procesado un mensaje y se establece en TRUE de forma predeterminada. A continuación, una función de controlador puede establecer el argumento en FALSE para indicar que no ha controlado un mensaje. En este caso, ATL seguirá buscando aún más una función de controlador en el mapa de mensajes. Al establecer este argumento en FALSE, primero puede realizar alguna acción en respuesta a un mensaje y, a continuación, permitir que el procesamiento predeterminado u otra función de controlador termine de controlar el mensaje.

Mapas de mensajes encadenados

ATL también permite encadenar mapas de mensajes, lo que dirige el control de mensajes a un mapa de mensajes definido en otra clase. Por ejemplo, puede implementar el control de mensajes común en una clase independiente para proporcionar un comportamiento uniforme para todas las ventanas que se encadenan a esa clase. Puede llevar a cabo el encadenamiento a una clase base o a un miembro de datos de su clase.

ATL también admite el encadenamiento dinámico, que permite realizar el encadenamiento al mapa de mensajes de otro objeto en tiempo de ejecución. Para implementar el encadenamiento dinámico, debe derivar la clase de CDynamicChain. A continuación, declare la macro CHAIN_MSG_MAP_DYNAMIC en el mapa de mensajes. CHAIN_MSG_MAP_DYNAMIC requiere un número único que identifique el objeto y el mapa de mensajes al que encadena. Debe definir este valor único mediante una llamada a CDynamicChain::SetChainEntry.

Puede llevar a cabo el encadenamiento a cualquier clase que declare un mapa de mensajes, siempre que la clase se derive de CMessageMap. CMessageMap permite que un objeto exponga sus mapas de mensajes a otros objetos. Tenga en cuanta que CWindowImpl ya se deriva de CMessageMap.

Mapas de mensajes alternativos

Por último, ATL admite mapas de mensajes alternativos, declarados con la macro ALT_MSG_MAP. Cada mapa de mensajes alternativo se identifica mediante un número único, que se pasa a ALT_MSG_MAP. Mediante el uso de mapas de mensajes alternativos, puede controlar los mensajes de varias ventanas en un mapa. Tenga en cuenta que, de forma predeterminada, CWindowImpl no usa mapas de mensajes alternativos. Para agregar esta compatibilidad, invalide el método WindowProc en la clase derivada de CWindowImpl y llame a ProcessWindowMessage con el identificador de mapa de mensajes.

Consulte también

Implementar una ventana