Tables des messages dérivées

Pendant la gestion des messages, case activée’utilisation de la carte de messages d’une classe n’est pas la fin de l’histoire de la carte de messages. Que se passe-t-il si la classe CMyView (dérivée de CView) n’a pas d’entrée correspondante pour un message ?

Gardez à l’esprit que CView, la classe de base de CMyView, est dérivée à son tour de CWnd. Ainsi CMyViewest un CView et est un CWnd. Chacune de ces classes possède sa propre carte de messages. La figure ci-dessous montre la relation hiérarchique des classes, mais gardez à l’esprit qu’un CMyView objet est un objet unique qui a les caractéristiques des trois classes.

Diagram showing the hierarchy of a view.
Hiérarchie d’affichage

Si un message ne peut pas être mis en correspondance dans la carte des messages de la classe CMyView, l’infrastructure recherche également la carte des messages de sa classe de base immédiate. La BEGIN_MESSAGE_MAP macro au début du mappage de messages spécifie deux noms de classe comme arguments :

BEGIN_MESSAGE_MAP(CMyView, CView)

Le premier argument nomme la classe à laquelle appartient le mappage de messages. Le deuxième argument fournit une connexion avec la classe de base immédiate, dans ce cas CView, afin que l’infrastructure puisse également rechercher son mappage de messages.

Les gestionnaires de messages fournis dans une classe de base sont donc hérités par la classe dérivée. Cela est très similaire aux fonctions membres virtuelles normales sans avoir à rendre toutes les fonctions membres du gestionnaire virtuelles.

Si aucun gestionnaire n’est trouvé dans l’un des mappages de messages de classe de base, le traitement par défaut du message est effectué. Si le message est une commande, l’infrastructure l’achemine vers la cible de commande suivante. S’il s’agit d’un message Windows standard, le message est transmis à la procédure de fenêtre par défaut appropriée.

Pour accélérer la correspondance du mappage de messages, l’infrastructure met en cache les correspondances récentes sur la probabilité qu’elle reçoive à nouveau le même message. L’une des conséquences est que le framework traite efficacement les messages non gérés. Les mappages de messages sont également plus efficaces que les implémentations qui utilisent des fonctions virtuelles.

Voir aussi

Comment le Framework effectue des recherches dans les tables des messages