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();
    
    }
    

  • Mod

    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);
    

Anmelden zum Antworten