Menü verbergen/deaktivieren



  • ich meinte nicht das ganze sondern nur z.B. das Bearbeiten-Teil



  • deaktivieren:

    CMenu* m;
    m = AfxGetMainWnd()->GetMenu();
    m->EnableMenuItem(NummerDesMenus, MF_BYPOSITION | MF_GRAYED);
    

    Bei NummerDesMenus einfach die Nr eintragen (von links mit 0 beginnend zählen)



  • das ist ja schon super!
    nur wie kann ich mit der checkbox das ein/ausschalten?

    wenn ich so mach wie du sagst wirds nur grau wenn ich drübergehe

    ich möchte aber dass es immer sofort ein -u. ausschaltet wenn ich auf die checkbox klicke

    wie mach ich das?

    dannke



  • Für die Checkbox ein ON_CLICKED-Ereignis hinzufügen. Fürs Verschwindenlassen: guck dir mal die FUnktion EnableMenuItem in der MSDN an, dann erübrigt sich diese Frage.



  • leider haben meine augen das MSDN das erste mal erblickt
    und gesucht habe ich auch und nichts verstanden leider

    kann mir jemand da raushelfen?

    danke sehr im voraus



  • wo genau liegt jetzt Dein Problem?



  • ich habe da ein programm der über viele menüeinträge verfügt und im dialogfeld ist
    und ich möchte für jeden eintrag eine checkbox machen damit man es deaktiviert/löscht wenn man es nicht braucht/will

    und wenn ich einmal auf die chaeckbox klicke soll es verschwinden/deaktivieren (besser verschwinden) und wenn ich es dann nochmal anklicke (kein häckchen) dann soll es wieder da sein

    verstehst mich?
    ( Ich weiss es noch nicht weill ich mit Bücher lesen nicht soweit bin
    möchte trotzdem sowas im programm haben)
    danke für verständnis



  • MuehBln schrieb:

    deaktivieren:

    CMenu* m;
    m = AfxGetMainWnd()->GetMenu();
    m->EnableMenuItem(NummerDesMenus, MF_BYPOSITION | MF_GRAYED);
    

    Bei NummerDesMenus einfach die Nr eintragen (von links mit 0 beginnend zählen)

    Jetzt verwende mal statt MF_BYPOSITION den Flag MF_BYCOMMAND (sollte glaub ich gehn)
    MFG, Sigi



  • leider geht das auch nicht



  • @maximo
    Also wenn ich dich richtig verstanden habe, hast du irgendwo in deinem Dialog eine Checkbox, die dafür verantwortlich ist, ob Menü-Einträge aktiviert oder deaktiviert sein sollen.

    Wenn's so ist, würde ich im Klassenassistent eine Membervar. für die CheckBox anlegen (er bietet dir eh BOOL an) und dann noch eine Nachrichtenbehandlungsroutine für die Checkbox im Klassenassistent hinzufügen für das Klickereignis (BN_CLICKED). In dieser Methode könntest du dann folgenden Code unterbringen:

    UpdateData(TRUE);
    CMenu *mmenu = GetMenu();
    CMenu *submenu = mmenu->GetSubMenu(1);		// ist das 2. Menü in deiner Menüleiste (also zB Menü "Bearbeiten")
    if(m_bCheck==TRUE)    //BOOL-Var überprüfen
    	//MenüEintrag "Ausschneiden" deaktivieren
    	submenu->EnableMenuItem(IDM_EDIT_CUT, MF_BYCOMMAND |MF_GRAYED);
    else
    	//MenüEintrag "Ausschneiden" aktivieren
    	submenu->EnableMenuItem(IDM_EDIT_CUT, MF_BYCOMMAND | MF_ENABLED);
    

    Hoffe, es hilft.



  • void CMenuprogDlg::OnCheck1() 
    {
    	CMenu *m = GetMenu();
    	m= m->GetSubMenu(0);
    
    	if(((CButton*)GetDlgItem(IDC_CHECK1))->GetCheck())
    		m->RemoveMenu(ID_DATEI_NEU,MF_BYCOMMAND);
    	else
    	{
    		m->InsertMenu(0,MF_BYCOMMAND,ID_DATEI_NEU,"Neu");
    		GetActiveWindow()->DrawMenuBar();
    	}
    }
    

    Das läßt die Menüeintrage verschwinden und wieder erscheinen. Leider in einer anderen Reihenfolge (noch 🤡 ).

    Nur wie du zB: das Popup-Menü-Item "Datei" oder "Bearbeiten" verschwinden läßt, daß weiß ich noch nicht. wenn das wer kann -> BITTE POSTEN 😉
    Ich werd später noch weiterprobieren.
    MFG, Sigi



  • @BigSigi : das habe ich ausprobiert und funktioniert
    nur eben nicht für das Menü selbst sondern für z.B. Datei - Neu
    und das will ich ja nicht 😞

    Datei - soll ausgeblendet sein

    danke


Anmelden zum Antworten