Einzelne Menüpunkte deaktivieren



  • Ich möchte in meiner MDI Anwendung in dem Menü des ChildViews zur Laufzeit einzelne Punkte deaktivieren.
    Also wenn ich auf einen bestimmten Menüpunkt klicke, soll dieser deaktiviert werden.

    Deaktivieren geht ja mit:

    myMenu->EnableMenuItem(ID_PARAMETERTEST_STARTEN,MF_GRAYED);
    

    Mein Problem ist, was nehme ich nun anstelle von "myMenu"?
    Hab versucht das mit GetMenu() zu lösen, aber geht leider nicht.
    Die folgende Funktion wird bei einem Klick auf den "Start"-Punkt im Menü aufgerufen. Nun soll dieser Menüpunkt ( Id: ID_START) deaktiviert werden.

    void CChildView::OnStart() 
    {
    
    	CString strTestConfig;
    	m_wndEdit.SetSel(0,-1);
    	m_wndEdit.ReplaceSel("");
    	CMenu* mmenu = GetMenu(); 
    	mmenu->EnableMenuItem(ID_START,MF_GRAYED); 
    
    }
    

    Bin für jede Hilfe dankbar.



  • Definiere Dir einfach einen Message-Handler:

    ON_UPDATE_COMMAND_UI(ID_PARAMETERTEST_STARTEN, OnUpdateParametertestStarten)
    

    mit dem Inhalt:

    void CChildView::OnUpdateParametertestStarten(CCmdUI* pCmdUI) 
    {
        pCmdUI->Enable(fEintragAktivieren ? TRUE : FALSE);
    }
    


  • Danke funktioniert super. Mit den ganzen Messages werd ich noch verrückt^^

    Habs so gelöst:

    void CChildView::OnUpdateStarten(CCmdUI* pCmdUI) 
    {
    	if(m_bTestRunning==FALSE)
    	{
    		pCmdUI->Enable(TRUE);
    	}
    	else
    	{
    		pCmdUI->Enable(FALSE);
    	}
    }
    

    m_bTestRunning ist einfach eine Membervarialbe vom Typ BOOL, die ich auf TRUE bzw. FALSE setze wenn der Punkt AKTIV bzw. INAKTIV sein soll.

    Das nur so für alle die das gleiche Problem haben sollten 😉



  • Und das ganze noch etwas gekürzt: 😉

    void CChildView::OnUpdateStarten(CCmdUI* pCmdUI) 
    { 
        pCmdUI->Enable(!m_bTestRunning); 
    }
    


  • ^^ stimmt



  • sri schrieb:

    void CChildView::OnUpdateParametertestStarten(CCmdUI* pCmdUI) 
    {
        pCmdUI->Enable(fEintragAktivieren ? TRUE : FALSE);
    }
    

    Und das Ganze noch etwas gekürzt:

    void CChildView::OnUpdateParametertestStarten(CCmdUI* pCmdUI) 
    {
        pCmdUI->Enable(fEintragAktivieren);
    }
    

    SCNR



  • Tja, optimieren wo man kann. 😃

    Obwohl ich die erste Variante immer noch als angenehmer empfinde. 😉



  • Klar immer schön optimieren. Nur 5min vor Feierabend hab ich auch keine Lust mehr nachzudenken, da wird halt geschrieben egal wie ^^


Anmelden zum Antworten