komplettes Submenu dynamisch aktivieren/deaktivieren
-
Guten Morgen zusammen
Wie im Titel schon angekündigt,, versuche ich ein komplettes Submenü du deaktivieren (ausgrauen). Einzelne Menüeinträge kann ich problemlos über "Add Event Handler" -> "UPDATE_COMMAND_UI" und dann pCmdUI->Enable(FALSE) bearbeiten. Aber wie und wo mache ich es mit einem ganzen Submenu (z.B. den Eintrag "Bearbeiten")
Besten Dank für die Hilfe
(Klopf)SpechtDetailinfo:
VisualStudio 2008 Pro
Windows XP Pro
MDI-Projekt
-
CMenu *Men; Men = GetMenu();
Men->EnableMenuItem(DEINE_ID_VOM_SUBMENÜ, false);
bzw.
Men->EnableMenuItem(DEINE_ID_VOM_SUBMENÜ, false);
Hoff das Hilft
-
Siehe C++ Q & A von DiLascia:
http://www.microsoft.com/msj/0299/c/c0299.aspx
-
Danke mal so weit
Es funktioniert so halber...
Folgendes funktioniert
CMenu* pMenu = GetMenu(); if(isTestsetSelected) pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_ENABLED); else pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED);
Dabei wird der Menueintrag über die Position angesprochen. Ist aber unschön, falls sich im Menü etwas verschiebt.
CMenu* pMenu = GetMenu(); if(isTestsetSelected) pMenu->EnableMenuItem(ID_TESTSET, MF_ENABLED); else pMenu->EnableMenuItem(ID_TESTSET,MF_GRAYED | MF_DISABLED);
Das funktioniert nicht. Kompiliert wunderschön, hat aber keine Auswirkung.
Und wie erzwinge ich ein Neuzeichnen des Menüs? Momentan wechselt der Menüeintrag erst wenn ich mit der Maus darüberfahre.
-
Nachtrag, vieleicht hilft das noch. Vieleicht ist es aber auch irrelevant.
Hab mal ein Blick in die Resourcendatei geworfen. Mir ist aufgefallen, dass beim Haupteintrag "Testset" keine ID zugeordnet ist (ID_TESTSET). Diese id habe ich im Resourceneditor vergeben (so wie ich sie für die einzelnen Einträge vergeben habe) und sie erscheint im Headerfile.
POPUP "Testset" BEGIN MENUITEM "&Kopieren", ID_TESTSET_COPY MENUITEM "&Einfügen", ID_TESTSET_PASTE MENUITEM "&Löschen", ID_TESTSET_DELETE MENUITEM "&Teilen", ID_TESTSET_SPLIT MENUITEM "&Bearbeiten", ID_TESTSET_EDIT MENUITEM "&Zurücksetzen", ID_TESTSET_RESET MENUITEM SEPARATOR MENUITEM "&Neue Optiongroup...", ID_TESTSET_NEWOPTIONGROUP END
Update: Nach einem speichern und erneutem Öffnen des Menüs im Editor ist die ID wieder verschwunden. Ich glaube, es läuft auf die Frage hinaus wie ich die ID dauerhaft speichere.
-
Warum schaust Du nicht in den Code, den ich Dir gesendet habe?
http://www.microsoft.com/msj/0299/c/c0299.aspx
-
Hab ich, nur ein wenig verzögert...
Beim ersten Mal durchlesen habe ich fälschlicherweise angenommen, dass es nicht auf mein Problem zutrifft. Bis ich begriffen habe, dass es dasselbe Prinzip ist innerhalb eines Submenüs.
Langer Rede kurzer Sinn: Ich habe meinen Code umgeschrieben auf Basis deines Links. Aber jetzt habe ich immer noch ein Problem. Das UPDATE_COMMAND_UI des ersten Menuitem innerhalb des Submenus wird erst ausgelöst, wenn ich das Submenü anklicke (in diesem Fall immer mit pCmdUI->m_pSubMenu==NULL). Aber irgendwie muss es ja angestossen werden, bevor ich das Submenu zum öffnen anklicke. Ich habe nie den Fall, dass pCmdUI->m_pSubMenu!=NULL ist (auch nicht bei der ersten Initalisierung).
Darum bleibt eine Frage bestehen. Muss ich das Menu irgendwie anstossen oder wie läuft das.