Freigeben über


Abgeleitete Meldungszuordnungen

Während der Nachrichtenverarbeitung ist die Überprüfung der eigenen Nachrichtenkarte einer Klasse nicht das Ende der Geschichte der Nachrichtenkarten. Was geschieht, wenn die Klasse CMyView (abgeleitet von CView) keinen übereinstimmenden Eintrag für eine Nachricht hat?

Denken Sie daran, dass CView, die Basisklasse von CMyView, wiederum von CWnd abgeleitet ist. So CMyViewist ein CView und ist ein CWnd. Jede dieser Klassen verfügt über ihre eigene Message Map. Die folgende Abbildung zeigt die hierarchische Beziehung der Klassen, bedenken Sie jedoch, dass ein CMyView Objekt ein einzelnes Objekt ist, das die Merkmale aller drei Klassen aufweist.

Diagramm mit der Hierarchie einer Ansicht.
Eine Ansichtshierarchie

Wenn eine Nachricht nicht in der Nachrichtenzuordnung der Klasse CMyViewabgeglichen werden kann, durchsucht das Framework auch die Nachrichtenzuordnung seiner unmittelbaren Basisklasse. Das BEGIN_MESSAGE_MAP Makro am Anfang der Nachrichtenzuordnung gibt zwei Klassennamen als Argumente an:

BEGIN_MESSAGE_MAP(CMyView, CView)

Das erste Argument benennt die Klasse, zu der die Nachrichtenzuordnung gehört. Das zweite Argument stellt eine Verbindung mit der unmittelbaren Basisklasse bereit, in diesem Fall CView, damit das Framework auch seine Nachrichtenzuordnung durchsuchen kann.

Die in einer Basisklasse bereitgestellten Nachrichtenhandler werden somit von der abgeleiteten Klasse geerbt. Dies ist sehr ähnlich wie normale virtuelle Mitgliedsfunktionen, ohne alle Handlermitgliedfunktionen virtualisieren zu müssen.

Wenn kein Handler in einer der Basisklassennachrichtenzuordnungen gefunden wird, wird die Standardverarbeitung der Nachricht ausgeführt. Wenn es sich bei der Nachricht um einen Befehl handelt, leitet es das Framework an das nächste Befehlsziel weiter. Wenn es sich um eine Windows-Standardnachricht handelt, wird die Nachricht an die entsprechende Standardfensterprozedur übergeben.

Um den Nachrichtenzuordnungsabgleich zu beschleunigen, speichert das Framework kürzlich erfolgte Übereinstimmungen im Cache, da es wahrscheinlich ist, dieselbe Nachricht nochmals zu erhalten. Eine Folge davon ist, dass das Framework unbehandelte Nachrichten recht effizient verarbeitet. Nachrichtenzuordnungen sind auch platzsparender und effizienter als Implementierungen, die virtuelle Funktionen verwenden.

Siehe auch

Wie das Framework-Nachrichtenzuordnungen durchsucht