Menüeinträge zur Laufzeit ausgrauen, deaktivieren

Topsen

Mitglied
Hallo,

ich möchte zur Laufzeit meines Programmes immer wieder einige Menupunkte aktivieren bzw. deaktivieren. Ich habe es mit folgendem Quellcode mal in der InitInstance von der APP Class versucht, aber es tut sich nichts.

CMenu* mmenu;
CMenu* submenu;

mmenu->LoadMenu(IDR_MAINFRAME);
submenu = mmenu->GetSubMenu(0);
submenu->EnableMenuItem(ID_PROJ_OEFFNEN, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);

Wo baue ich es am besten in meiner MFC Applikation ein und wie so, dass es auch funktioniert :)
Ich müsste quasi an mehreren Stellen im Quellcode immerwieder Veränderungen am Menü vornehmen.

THX,

Topsen
 
Wird das Menu-Item denn gefunden?

Andere Möglichkeit:
MFC hat ja diesen wahnsinnig tollen, fast gar nicht gehackten UpdateCmdUI-Handler. Evtl. überschreibt der deine Änderungen wieder?
 
Original geschrieben von Kachelator
Ja, genau da gehört sowas auch hin. Was hast du dagegen? Ist doch extrem praktisch.

Der Grundgedanke ist gut, wenn man etwas mit dem MFC-System machen kann, sollte man das auch tun.

Das Problem mit dem CmdUIHandler bzw. ziemlich vielem bei MFC ist, dass es ziemlich schnell Probleme gibt, wenn man etwas nicht so machen will, wie MFC es vorzieht. Popupmenüs sind zum Beispiel so eine Sache.
 
Im Ressourceneditor drückst du über dem Menüeintrag Ctrl-W, um den Classwizard zu öffnen. Die Anfrage, ob eine Klasse erstellt werden soll, kannst du verneinen. Jetzt kannst du deinem Menüpunkt Handler für zwei Nachrichten verpassen:
COMMAND dürftest du schon kennen. Bau dir einen Handler ein für UPDATE_COMMAND_UI. Der sieht dann ungefähr so aus:

Code:
void CPaletteView::OnUpdateEditPaste(CCmdUI* pCmdUI) 
{
  if ( theClipBoard.size() == 0 )
    pCmdUI->Enable( FALSE );
  else
    pCmdUI->Enable( TRUE );
}
pCmdUI ist immer der Pointer auf das betreffende Item im Menü. Es funktioniert genausogut für Toolbars.
 

Neue Beiträge

Zurück