Wann müssen Updatehandler aufgerufen werden?
Angenommen, der Benutzer klickt im Menü "Datei" mit der Maus, wodurch eine WM_INITMENUPOPUP Nachricht generiert wird. Der Updatemechanismus des Frameworks aktualisiert gemeinsam alle Elemente im Menü "Datei", bevor das Menü herunterfällt, damit der Benutzer es sehen kann.
Dazu leitet das Framework Aktualisierungsbefehle für alle Menüelemente im Popupmenü entlang des Standardbefehlsrouting weiter. Befehlsziele für das Routing haben die Möglichkeit, alle Menüelemente zu aktualisieren, indem sie dem Aktualisierungsbefehl mit einem entsprechenden Nachrichtenzuordnungseintrag (des Formulars ON_UPDATE_COMMAND_UI
) und dem Aufruf einer "Updatehandler"-Funktion übereinstimmen. Daher werden für ein Menü mit sechs Menüelementen sechs Aktualisierungsbefehle gesendet. Wenn ein Updatehandler für die Befehls-ID des Menüelements vorhanden ist, wird er aufgerufen, um die Aktualisierung auszuführen. Andernfalls sucht das Framework nach dem Vorhandensein eines Handlers für diese Befehls-ID und aktiviert oder deaktiviert das Menüelement entsprechend.
Wenn das Framework während der Befehlsrouting keinen Eintrag findet ON_UPDATE_COMMAND_UI
, wird das Benutzeroberflächenobjekt automatisch aktiviert, wenn ein Eintrag an einer ON_COMMAND
beliebigen Stelle mit derselben Befehls-ID vorhanden ist. Andernfalls wird das Benutzeroberflächenobjekt deaktiviert. Um sicherzustellen, dass ein Benutzeroberflächenobjekt aktiviert ist, geben Sie einen Handler für den Befehl an, den das Objekt generiert oder einen Updatehandler dafür angibt. Siehe Abbildung im Thema User-Interface Objects and Command IDs.
Es ist möglich, die Standardmäßige Deaktivierung von Benutzeroberflächenobjekten zu deaktivieren. Weitere Informationen finden Sie im m_bAutoMenuEnable Mitglied der Klasse CFrameWnd
in der MFC-Referenz.
Die Menüinitialisierung erfolgt automatisch im Framework, wenn die Anwendung eine WM_INITMENUPOPUP Nachricht empfängt. Während der Leerlaufschleife durchsucht das Framework das Befehlsrouting für Schaltflächenaktualisierungshandler auf die gleiche Weise wie für Menüs.
Siehe auch
Vorgehensweise: Aktualisieren von Benutzeroberflächenobjekten