Une carte message associe une fonction de gestionnaire d'événements à un message particulier, commande ou notification. À l'aide de ATL message carte des macros, vous pouvez spécifier une carte pour une fenêtre de message. Les procédures de fenêtre en CWindowImplet CDialogImpl CContainedWindow directement messages une fenêtre à sa carte de message.
Les fonctions de gestionnaire de message acceptent un argument supplémentaire de type BOOLamp; . Cet argument indique si un message a été traité, et il est défini à TRUE par défaut. Une fonction de gestionnaire d'événements peut alors définir l'argument à F&ALSE pour indiquer qu'il n'a pas géré un message. Dans ce cas, ATL continuera de chercher une fonction gestionnaire de plus dans la carte message. Par cet argument FALSE , vous pouvez d'abord effectuer une action en réponse à un message et permettre ensuite le traitement par défaut ou une autre fonction de gestionnaire d'événements pour terminer le message de manutention.
ATL vous permet également de cartes message de chaîne, qui dirige le message handling pour une carte message définie dans une autre classe. Par exemple, vous pouvez implémenter message commun de manutention dans une classe distincte pour fournir un comportement uniform pour toutes les fenêtres de chaînage à cette classe. Vous pouvez enchaîner à une classe de base ou à un membre de données de votre classe.
ATL appuie également le chaînage dynamique, qui vous permet à la chaîne de la carte de l'objet un autre message au moment de l'exécution. Pour mettre en œuvre le chaînage dynamique, vous devez dériver votre classe de CDynamicChain. Puis déclarer la macro CHAIN_MSG_MAP_DYNAMIC dans votre message. CHAIN_MSG_MAP_DYNAMIC nécessite un numéro unique qui identifie l'objet et la carte message auquel vous enchaînez. Vous devez définir cette valeur unique via un appel à CDynamicChain::SetChainEntry.
Vous pouvez enchaîner à n'importe quelle classe qui déclare une carte message, pourvu que la classe dérive de CMessageMap. CMessageMap permet à un objet d'exposer ses cartes message à d'autres objets. Notez que CWindowImpl dérive déjà de CMessageMap.
Enfin, ATL prend en charge les cartes message remplaçant, déclarées avec la macro ALT_MSG_MAP . Chaque carte remplaçant message est identifié par un numéro unique, qui vous passez à ALT_MSG_MAP. À l'aide de message remplaçant des cartes, vous pouvez gérer les messages de plusieurs fenêtres en une seule carte. Notez que par défaut, CWindowImpl n'utilise pas de cartes de remplacement de message. Pour ajouter ce support, substituez la méthode WindowProc dans votre CWindowImpl-classe dérivée et appelez ProcessWindowMessage avec l'identificateur de message (carte).