Partager via


Tables des messages (ATL)

Une carte de messages associe une fonction de gestionnaire à un message, une commande ou une notification particulier. À l’aide des macros de mappage de messages d’ATL, vous pouvez spécifier une carte de messages pour une fenêtre. Les procédures de fenêtre dans CWindowImpl, CDialogImplet CContainedWindowT dirigent les messages d’une fenêtre vers son mappage de messages.

Les fonctions du gestionnaire de messages acceptent un argument supplémentaire de type BOOL&. Cet argument indique si un message a été traité et qu’il a la valeur TRUE par défaut. Une fonction de gestionnaire peut ensuite définir l’argument sur FALSE pour indiquer qu’il n’a pas géré un message. Dans ce cas, ATL continuera à rechercher une fonction de gestionnaire plus loin dans la carte des messages. En définissant cet argument sur FALSE, vous pouvez d’abord effectuer une action en réponse à un message, puis autoriser le traitement par défaut ou une autre fonction de gestionnaire à terminer la gestion du message.

Mappages de messages chaînés

ATL vous permet également de chaîner des mappages de messages, ce qui dirige la gestion des messages vers une carte de messages définie dans une autre classe. Par exemple, vous pouvez implémenter la gestion courante des messages dans une classe distincte afin de fournir un comportement uniforme pour tous les chaînages windows à cette classe. Vous pouvez chaîner à une classe de base ou à un membre de données de votre classe.

ATL prend également en charge le chaînage dynamique, ce qui vous permet de chaîner la carte des messages d’un autre objet au moment de l’exécution. Pour implémenter un chaînage dynamique, vous devez dériver votre classe de CDynamicChain. Déclarez ensuite la macro CHAIN_MSG_MAP_DYNAMIC dans votre carte de messages. CHAIN_MSG_MAP_DYNAMIC nécessite un nombre unique qui identifie l’objet et le mappage de messages auxquels vous chaînez. Vous devez définir cette valeur unique par le biais d’un appel à CDynamicChain::SetChainEntry.

Vous pouvez chaîner à n’importe quelle classe qui déclare une carte de messages, à condition que la classe dérive de CMessageMap. CMessageMap permet à un objet d’exposer ses messages mappés à d’autres objets. Notez que CWindowImpl cela dérive déjà de CMessageMap.

Mappages de messages alternatifs

Enfin, ATL prend en charge d’autres mappages de messages, déclarés avec la macro ALT_MSG_MAP . Chaque autre carte de messages est identifiée par un numéro unique que vous passez à ALT_MSG_MAP. À l’aide de mappages de messages alternatifs, vous pouvez gérer les messages de plusieurs fenêtres dans une seule carte. Notez que par défaut, CWindowImpl n’utilise pas d’autres mappages de messages. Pour ajouter cette prise en charge, remplacez la WindowProc méthode dans votre CWindowImplclasse dérivée et appelez-la ProcessWindowMessage avec l’identificateur de carte de messages.

Voir aussi

Implémentation d’une fenêtre