Befehlsrouting

Ihre Verantwortung beim Arbeiten mit Befehlen ist darauf beschränkt, Nachrichtenzuordnungsverbindungen zwischen Befehlen und deren Handlerfunktionen herzustellen, eine Aufgabe, für die Sie den MFC-Klassen-Assistenten verwenden. Sie müssen auch den Code für die Befehlshandler schreiben.

Windows-Meldungen werden in der Regel an das Hauptrahmenfenster gesendet, aber Befehlsmeldungen werden dann an andere Objekte weitergeleitet. Das Framework leitet Befehle durch eine Standardsequenz von Befehlszielobjekten, wobei vorausgesetzt wird, dass eines von ihnen einen Handler für den Befehl besitzt. Jedes Befehlszielobjekt überprüft seine Meldungszuordnung, um festzustellen, ob es die eingehende Meldung verarbeiten kann.

Verschiedene Befehlszielklassen überprüfen ihre eigenen Meldungszuordnungen zu unterschiedlichen Zeitpunkten. In der Regel leitet eine Klasse den Befehl an bestimmte andere Objekte weiter, um ihnen die erste Chance mit dem Befehl zu geben. Wenn keines dieser Objekte den Befehl verarbeitet, überprüft die ursprüngliche Klasse ihre eigene Meldungszuordnung. Wenn sie dann keinen Handler bereitstellen kann, kann sie den Befehl noch an weitere Befehlsziele leiten. Die Tabelle Standardmäßige Befehlsweiterleitung unten zeigt, wie die einzelnen Klassen diese Sequenz strukturieren. Die allgemeine Reihenfolge, in der ein Befehlsziel einen Befehl weiterleitet, ist:

  1. An sein derzeit aktives untergeordnetes Befehlszielobjekt.

  2. Das Gerät selbst

  3. An andere Befehlsziele.

Wie teuer ist dieser Routingmechanismus Im Vergleich zu dem, was Ihr Handler als Reaktion auf einen Befehl ausführt, ist die Kosten für das Routing niedrig. Beachten Sie, dass das Framework nur dann Befehle generiert, wenn der Benutzer mit einem Benutzeroberflächenobjekt interagiert.

Standardmäßige Befehlsweiterleitung

Wenn ein Objekt dieses Typs einen Befehl empfängt. . . Es gibt sich selbst und anderen Befehlszielobjekten in der folgenden Reihenfolge eine Chance, den Befehl zu verarbeiten:
MDI-Rahmenfenster (CMDIFrameWnd) 1. Aktiv CMDIChildWnd
2. Dieses Rahmenfenster
3. Anwendung (CWinApp Objekt)
Dokumentrahmenfenster (CFrameWnd, CMDIChildWnd) 1. Aktive Ansicht
2. Dieses Rahmenfenster
3. Anwendung (CWinApp Objekt)
Sicht 1. Diese Ansicht
2. Dokument, das an die Ansicht angefügt ist
Dokument 1. Dieses Dokument
2. Dokumentvorlage, die an das Dokument angefügt ist
Dialogfeld 1. Dieses Dialogfeld
2. Fenster, das das Dialogfeld besitzt
3. Anwendung (CWinApp Objekt)

Wo nummerierte Einträge in der zweiten Spalte der vorstehenden Tabelle andere Objekte erwähnen, z. B. ein Dokument, finden Sie das entsprechende Element in der ersten Spalte. Wenn Sie z. B. in der zweiten Spalte lesen, dass die Sicht einen Befehl an sein Dokument weiterleitet, können Sie in der ersten Spalte im Eintrag „Dokument“ dem Routing weiter folgen.

Siehe auch

So ruft das Framework einen Handler auf