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)Specht

    Detailinfo:
    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


  • Mod

    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.


  • Mod

    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.


Anmelden zum Antworten