2017-01-04 2 views
2

Ich versuche, Hauptmenüpunkte zu deaktivieren. in MDI-Anwendung, das funktioniert:In SDI: Wo Menü zu deaktivieren, Code in MDI

CWnd *pW=AfxGetMainWnd(); 
CMenu * pMenu=pW->GetMenu(); 
pMenu->EnableMenuItem(5, MF_BYPOSITION | MF_GRAYED | MF_DISABLED); 

Nicht in SDI. Höchstwahrscheinlich stelle ich es an die falsche Stelle. CMainframe? Die Aussicht? Welches spezielle Unterprogramm? Ich habe versucht, die Konstruktoren, aber keine Änderung in der Benutzeroberfläche.

Jede Hilfe wird geschätzt, ich hämmere meinen Kopf und suchte zahlreiche Web-Sites (und hier), fand aber nicht die richtige Richtung.

vielen Dank

Antwort

1

Sie wollen nicht direkt/deaktivieren Menüpunkte unter MFC ermöglichen, ob es SDI oder MDI ist.

Wenn Sie das Element zum Menü hinzufügen, fügen Sie stattdessen zwei Ereignishandler hinzu. Einer wird für "COMMAND" sein, der andere für "UPDATE_COMMAND_UI".

enter image description here

die COMMAND Handler führt tatsächlich den Befehl aus für diesen Menüeintrag.

Der Handler UPDATE_COMMAND_UI (indirekt) aktiviert/deaktiviert den Menüeintrag, indem er true/false zurückgibt, um anzugeben, ob er aktiviert werden soll.

Warum dies vorzuziehen ist: In erster Linie, weil Sie (zum Beispiel) sowohl einen Menüeintrag als auch eine Symbolleiste haben können, die dieselbe Aktion aufrufen. Dies aktiviert/deaktiviert beide automatisch entsprechend.

0

können Sie das tun, indem Sie Klassen-Assistenten hinzufügen Funktion, die Griffe aktivieren/deaktivieren Menüpunkte über UPDATE_COMMAND_UI: Ich

void CMyAdoMfcView::OnUpdateAddnew(CCmdUI* pCmdUI) 
{ 
    // TODO: Add your command update UI handler code here 
    pCmdUI->Enable(true); 
} 

in meinem Code AddNew den Menüpunkt aktiviert.

+0

Ich denke, dass beide Antworten gelten, wenn ich einen Untereintrag deaktivieren möchte. Wenn ich Dateien-> Neu deaktivieren möchte, verwende ich UPDATE_COMMAND_UI. Aber ich möchte den vollständigen Menüeintrag deaktivieren. Ich glaube, ich habe meine Lösung aus Paetzolds Buch bekommen. Einziges Problem: Wenn ich es an der falschen Stelle mache, kann das Menü später wieder aktiviert werden – opto

Verwandte Themen