Partager via


Les tables des messages dérivées

Lors de la gestion des messages, l'activation de la table des messages d'une classe ne correspond pas à la fin de l'histoire de table des messages. Que se passe-t-il si la classe CMyView (dérivée de CView) ne possède pas d'entrée correspondant à un message ?

N'oubliez pas que CView, la classe de base de CMyView, est dérivée elle-même de CWnd. Par conséquent CMyView estCView et estCWnd. Chacune de ces classes possède sa propre table des messages. L'illustration « une hiérarchie de vues » ci-dessous montre la relation hiérarchique des classes, mais gardez à l'esprit qu'un objet CMyView est un objet qui a les caractéristiques des trois classes.

Hiérarchie de vues

Hiérarchie d'un affichage

Si un message ne peut pas être mis en correspondance dans la table des messages de la classe CMyView, l'infrastructure recherche également la table des messages de la classe de base immédiate. La macro BEGIN_MESSAGE_MAP au début de la table des messages spécifie deux noms de classes en tant qu'arguments :

BEGIN_MESSAGE_MAP(CMyView, CFormView)

Le premier argument nomme la classe à laquelle la table des messages appartient. Le deuxième argument fournit une connexion avec la classe de base immédiate (CView ici) afin que le framework puisse chercher dans la table des messages aussi.

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

Si aucun responsable ne se trouve dans les tables des messages à l'exception de classe de base, le traitement par défaut du message est effectué. Si le message est une commande, le framework le route vers la commande cible suivante. Si c'est un message standard Windows, le message est transmis à la procédure d'affichage par défaut appropriée.

Pour accélérer la correspondance de la table des messages, le framework met en cache les correspondances récentes sur la probabilité de recevoir à nouveau le même message. Une conséquence de cela est que le framework traite les messages non pris en charge assez efficacement. Les tables des messages sont également plus spatialement efficaces que les implémentations qui utilisent des fonctions virtuelles.

Voir aussi

Concepts

comment l'infrastructure recherche des tables des messages