Popup-Menüs disablen, normale Einträge jedoch nicht
-
Hi,
ich nutze folgenden Code:
void CMainFrame::ShowMenu(bool bShow) { m_pMenu = AfxGetMainWnd()->GetMenu(); for (UINT i = 0; i < m_pMenu->GetMenuItemCount(); i++) m_pMenu->EnableMenuItem(i, MF_BYPOSITION | (bShow ? !MF_GRAYED : MF_GRAYED)); AfxGetMainWnd()->DrawMenuBar(); }
Damit kann ich Popup-Menüeinträge wunderbar disablen (wenn bShow = false), jedoch bleiben normale Einträge (die einen Menü"end"punkt darstellen und kein Klappmenü) schwarz und klickbar. Ich hab es auch schon mit MF_BYCOMMAND und der ID versucht, aber da regt sich nix
thx für eure hoffentlich hilfreiche Hilfe
tieEdit: auch wenn ich im Ressourceeditor die Eigenschaft für den Menüeintrag auf "grau" setze, bleibt er schwarz
-
Schau mal zu ON_UPDATE_COMMAND_UI_RANGE in die MSDN.
Edit: Aber danke, jetzt kann ich endlich auch Popupmenüs ausgrauen, wenn da drunter nix zum Anklicken frei ist.
-
Mhh danke, hab mir das jetzt angeschaut, aber sehe nicht so ganz, wie ich das einsetzen sollte bzw was das überhaupt macht. Wenn ich es recht verstehe, kann ich damit vielen IDs eine Methode zuordnen, die sie als update-funktion nutzen
aber was macht dabei, das mein eintrag auch grau wird?
-
Ich habe dir mal eine von meinen Funktionen dazu rausgesucht, da kannst du abgucken.
void CMainFrame::OnUpdateAndererView(CCmdUI* pCmdUI) { pCmdUI->Enable(m_nCurID != pCmdUI->m_nID); // Nicht denselben View nochmal aufrufen }
Hast du noch nie mit UpdateCommandUI gearbeitet? Das funktioniert genauso.
Eine Sache musst du beachten:
Die IDs der Menüeintrage MÜSSEN direkt aufeinanderfolgend sein. Geh in die resource.h und guck das nach und korrigiere das schlimmstenfalls.
Wenn du da war geändert hast, musst du alles neu bauen, sonst merkt der nix von den Änderungen.Okay?
-
Ich hab zwar immernoch nich verstanden, wieso er um das ganze nicht schwarz sondern grau darzustellen, so ne update brauch, aber ich hab mal eine eingebaut (erstmal keine range, sondern nur 1 einzelne für einen der betroffenen einträge)
Die hab ich erstmal folgendermaßen aussehen lassen:
void CMainFrame::OnUpdateDateneingabeLeistungsfkt(CCmdUI* pCmdUI) { pCmdUI->Enable(); }
Aber ich habe das gefühl, wir reden aneinander vorbei (oder ich vertseh einfach ncih was du meinst
)
Deshalb nochmal mein Prob:
So sieht mein Menü aus:
http://home.arcor.de/ossionline/menu.gif
Aber die beiden schwarzen Einträge müssen auch grau sein
-
Dann schreib mal ein FALSE in die Klammern.
Sonst nimmt der nämlich true und dann ist es schwarz.
-
ahhhh wunderbar, jetzt hab ichs kapiert
schwere geburtthx jedenfalls