Menue-Einträge ausgrauen
-
Hallo
wenn ich in meinem Programm bestimmte Einstellungen aktiviere sollen manche Menue-Einträge nicht verfügbar sein, deshalb möchte ich sie gerne ausgrauen.
Weiß denn jemand wie das funktioniert?
-
Das geht über die WM_UPDATE_UI Nachrichten.
Allerdings bei Dialoges nur mit einem Workaround: http://www.c-plusplus.net/forum/viewtopic-var-t-is-175292.html
-
Warum funktioniert denn folgendes nicht:
void CMainFrame::UpdateMenu() { HMENU hMenu =::GetMenu(m_hWnd); EnableMenuItem(hMenu, ID_DEVICE_FACTORY_SETTINGS, MF_BYCOMMAND | MF_GRAYED); DrawMenuBar(); }
-
Weil die MFC ein WM_COMMAND Rotuing Modul hat das automatisch die entsprechenden ON_COMMAND Handler prüft und ON_UPDATE_COMMAND_UI Handler aufruft!
Deshalb! Das ist ein Feature und kein Bug! Es eine der besten Funktionen der MFC in meinen Augen.
-
Da geb ich dir recht, würde das auch als ein sehr schönes feature ansehen, wenn es bei mir funktionieren würde.
ON_UPDATE_COMMAND_UI(ID_DEVICE_FACTORYSETTINGS,OnUpdateDeviceFactorysettings)void CMainFrame::OnUpdateDeviceFactorysettings(CCmdUI *pCmdUI) { pCmdUI->m_pMenu->EnableMenuItem(ID_DEVICE_FACTORYSETTINGS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); /* oder so? funktioniert auch nicht CMenu *poMenu; poMenu = GetMenu(); CMenu* poSubMenu; poSubMenu = poMenu->GetSubMenu(0); poSubMenu->EnableMenuItem(ID_FILE_CLOSEDATABASE, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED); */ }Hab ich iregendwas vergessen? Oder mache ich schon wieder irgend etwas falsch?
-
maRKus23 schrieb:
pCmdUI->m_pMenu->EnableMenuItem(ID_DEVICE_FACTORYSETTINGS, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);Was hast du da vor?

Mach mal:pCmdUI->Enable(FALSE);