wie deaktiviert man bestimmte Hauptmenüeinträge?!?



  • Ich habe momentan kleine schwirigkeiten, bestimmte Menüeinträge zu deaktivieren.
    Vom prinziep her müsste es klappen, aber es tuts nicht

    ...
    pParentMenu->AppendMenu (MF_STRING|MF_GRAYED, pCustMenu->uiCommandID, CString (pCustMenu->szName) + CString (" "));
    pParentMenu->EnableMenuItem (pCustMenu->uiCommandID, MF_BYCOMMAND|MF_GRAYED);
    ...
    

    Ich muss dazu sagen, ich programmiere mit VC++ 6 (MFC). der Menüeintrag wird ordnungsgemäß hinzugefügt und funktioniert auch soweit. allerdings soll jener eintrag 😞 nicht anklickbar sein, weil ich die dahinter liegende funktion erst später für den anwender verfügbar machen will, er soll aber schon sehen, was demnächst kommt. weiß jemand was ich falsch mache?



  • Da hast Du mindestens 2 Möglichkeiten:

    1. Ist noch kein Command-Handler

    ON_COMMAND(ID_MENUPUNKT...))
    

    vorhanden, bleibt der Menüpunkt automatisch grau

    2. Wenn schon vorhanden, dann auch

    ON_UPDATE_COMMAND_UI(ID_MENUPUNKT,OnUpdateTest)
    

    mit dem Inhalt

    Appl::OnUpdateTest(CCmdUI *pCmdUI)
    {
      if(ich)//oder wie auch immer
         pCmdUI->Enable(true);
      else //alle anderen
        pCmdUI->Enable(false);
    }
    

    hinzufügen



  • naja, meine Logig ist (Das hinzufügen und deaktivieren) ist in irgend einem Objekt vergraben und dort habe ich keine MASSAGE_MAP. Von daher weis ich garnicht, wie ich das realisieren soll. die UIDs habe ich auch nicht fest (z.b. wie ID_MY_MENUENTRY), das menü ist dynamisch und bekommt auch ihre IDs dynamisch, von daher wüsste ich auch nicht, mit welcher id ich die OnUpdate-Funktion verknüpfen soll.

    Ich hatte auch mal nen kleines Testprojekt gemacht und dort hat der Code funktioniert, also der Eintrag war danach grau. warum funktioniert das in meinem hauptprogramm nicht. scheinbar muss ich beim erzeugen oder so was falsch gemacht haben. gibts da etwas besonderes zu beachten?



  • Kannst Du doch auch von aussen steuern:

    App1::EnableMyMenuItem(BOOL enable)
    {
         m_myMenuItemEnable = enable;
    }
    
    Appl::OnUpdateTest(CCmdUI *pCmdUI)
    {
         pCmdUI->Enable(m_myMenuItemEnable);
    }
    

Anmelden zum Antworten