Dialog - Problem mit CMenu::EnableMenuItem



  • Hallo beisammen

    Ich möchte im laufenden Programm MenuItems aktivieren bzw. deaktivieren. Nach kurzer Suche hat mir google eine wohl alte Methode (EnableMenuItem) und eine neuere über CCmdUI->Enable (ON_UPDATE_UI).

    Aber egal was ich mache oder ausprobieren, Fehler gibts vom Compiler oder in der RunTime keine, funktionieren tut es allerdings net.

    void CMachineStatusDlg::OnUpdateFileClosedatabase(CCmdUI *pCmdUI)
    {
      pCmdUI->Enable(FALSE);
    
      /*
      // Klappt auch net...
    
      CMenu oMenu;
      oMenu.LoadMenu(IDR_MENU1);
    
      CMenu* poSubMenu;
    
      poSubMenu = oMenu.GetSubMenu(0);
      poSubMenu->EnableMenuItem(ID_FILE_CLOSEDATABASE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);*/
    }
    

    Woran liegt es, was fehlt euch um den Fehler zu tun oder was kann ich machen um ihn zu beheben?

    Danke für die Hilfe im Vorraus,

    Gruß, Kane



  • Hallo KaneMX, ich mache das seit Jahren genau so:

    CMachineStatusDlg::OnUpdateFileClosedatabase(CCmdUI *pCmdUI)
    {	if(Bedingung)
    		pCmdUI->Enable(TRUE);
    	else
    		pCmdUI->Enable(FALSE);
    }
    

    Die andere Variante kannst Du an dieser Stelle vergessen. Dein Fehler muss woanders liegen.
    Hasst Du

    ON_UPDATE_COMMAND_UI(ID_FILE_CLOSEDATABASE, OnUpdateFileClosedatabase)
    

    in der MESSAGE_MAP hinzugefügt?



  • Tester2 schrieb:

    CMachineStatusDlg::OnUpdateFileClosedatabase(CCmdUI *pCmdUI)
    {	if(Bedingung)
    		pCmdUI->Enable(TRUE);
    	else
    		pCmdUI->Enable(FALSE);
    }
    

    Oder für faule wie mich:

    CMachineStatusDlg::OnUpdateFileClosedatabase(CCmdUI *pCmdUI)
    {
    	pCmdUI->Enable(Bedingung);
    }
    

    😉

    Hast du evtl. das Menü in einem Dialog? Da gibts nämlich Probleme und afair auch einen Workaround (den ich beim letzten Suchen leider nicht wieder in der MSDN finden konnte, weshalb er auch noch nicht in der FAQ ist 😞 ).



  • Estartu, Du hast Recht.

    CMachineStatusDlg
    

    scheint ein Dialog zu sein. Hatte ich übersehen. Da funktioniert das bei mir auch nicht so, wie es soll. Der Menüpunkt ist zwar von der Funtionalität disabled, aber nicht grau. 😞



  • Tester2 schrieb:

    Estartu, Du hast Recht.

    CMachineStatusDlg
    

    scheint ein Dialog zu sein. Hatte ich übersehen.

    Ich auch, sonst hätte ich nicht gefragt. 😉

    Ha, ich glaube ich hab den Workaround gefunden: http://support.microsoft.com/kb/242577
    Guckst du mal, ob es dir hilft? Dann kann ich das in die FAQ aufnehmen. 🙂



  • Also bei mir funktioniert es damit. 🙂
    Werde ich mir merken, falls ich mal Bedarf habe.



  • ich habe das problem bereits anders gelöst.

    der fehler lag an der art wie ich das menu geladen habe, was wohl mit dem dialog zusammenhängt.

    void CMachineStatusDlg::OnUpdateFileClosedatabase(CCmdUI *pCmdUI)
    {
      // Falsche Variante
      // CMenu oMenu;
      // oMenu.LoadMenu(IDR_MENU1);
      // Richtige Variante
      CMenu *poMenu;
      poMenu = GetMenu();
    
      CMenu* poSubMenu;
    
      poSubMenu = poMenu->GetSubMenu(0);
      poSubMenu->EnableMenuItem(ID_FILE_CLOSEDATABASE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
    }
    

    trotzdem danke für die hilfe 🙂


Log in to reply