MFC menu item checkbox-Verhalten
Ich versuche, ein Menü-Element hinzuzufügen, so dass es wirkt wie ein Häkchen, wo die Benutzer können aktivieren/deaktivieren Sie, und die anderen Klassen sehen können, dass der Menüpunkt das Häkchen status. Ich erhielt einen Vorschlag, der die Schaffung einer Klasse für das Menü option (mit einem popup-option), aber ich kann nicht erstellen Sie eine Klasse für das Menü option wenn ich in der Ressource-layout-editor in Visual Studio 2005. Es wäre toll zu hören, Vorschläge auf die einfachste Weise zu erstellen, die Menüpunkte, die Sie tun können, was ich beschrieben habe.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die
CCmdUI::SetCheck
Funktion fügen Sie ein Markierungsfeld, um einen Menüpunkt, über eineON_UPDATE_COMMAND_UI
- handler-Funktion, und dieON_COMMAND
handler ändern Sie den Zustand der checkbox. Diese Methode funktioniert sowohl für die Anwendung Hauptmenü und popup-Menüs, die Sie erstellen können.Vorausgesetzt, Sie haben eine MDI-oder SDI-MFC-Anwendung, sollten Sie zunächst entscheiden, wo Sie möchten, fügen Sie die handler-Funktionen, zum Beispiel in der Anwendung, Haupt-frame, ein Dokument oder eine view-Klasse. Dies hängt davon ab, was die Kennzeichnung genutzt werden: wenn es Kontrollen in der gesamten Anwendung Verhalten, steckte es in die application-Klasse; wenn es der Controller-Ansicht-spezifische Verhalten, steckte es in Ihre view-Klasse, etc.
(Auch, würde ich empfehlen, den Menüpunkt Überprüft Eigenschaft im Ressourcen-editor festgelegt False.)
Hier ist ein Beispiel für die Verwendung einer view-Klasse zur Steuerung der checkbox-Zustand der
ID_MY_COMMAND
menu item:Sollten Sie sicherstellen, dass die
m_Flag
member-variable initialisiert wird, zum Beispiel, in derCMyView
Konstruktor oderOnInitialUpdate
Funktion.Ich hoffe, das hilft!
@ChrisN Ansatz funktioniert nicht ganz für MFC-Dialogfeld-Anwendungen (die
pCmdUI->SetCheck(m_Flag);
hat keine Wirkung). Hier ist eine Lösung für die Dialog-apps:Referenzen:
http://www.codeguru.com/forum/showthread.php?t=322261
Landete ich abrufen im Menü vom mainframe mit GetMenu () - Methode, und dann auf das Menü Objekt und ID-Nummern zu nennen CheckMenuItem() mit den richtigen flags, sowie GetMenuState () - Funktion.