Dynamisches Menü



  • Hallo zusammen,

    In meiner Anwendung habe ich folgendes Problem:

    Ich verwende CMenu um ein SubMenu in einem PopupMenu anzuzeigen:

    void CDrawView::OnUpdateLayer(CCmdUI* pCmdUI)
    {
    	CMenu SubMenu;
    	SubMenu.CreatePopupMenu();
    	UINT ID = ID_LAYER_LAYER1;						// SetNew Names
    	for (int n=1;n<GetDocument()->GetModellHead()->_LayerStrings.GetSize(); n++){				
    		SubMenu.InsertMenu(0xFFFFFFFF,MF_BYPOSITION|MF_STRING|MF_ENABLED,ID,GetDocument()->GetModellHead()->_LayerStrings.GetAt(n));
    		SubMenu.EnableMenuItem(ID, MF_BYCOMMAND|MF_ENABLED );
    		ID++;
    	}
    
    	pCmdUI->m_pMenu->ModifyMenu(ID_LAYER,MF_BYCOMMAND|MF_POPUP , (UINT)SubMenu.m_hMenu,
    		pLText->Get("Layer","SubMenu"));
    
    	SubMenu.Detach();
    }
    

    Das funktioniert auch wunderbar, nur leider bleiben die Menüeinträge immer grau. Trotzdem ich MF_ENABLED verwende.

    Erst wenn ich eine zur ID passende Funktion in die MassageMap eintrage

    BEGIN_MESSAGE_MAP(CDrawView, MSJSuperView)
    ...
    ON_COMMAND(ID_LAYER_LAYER1, OnLayerLayer1)
    ...
    

    Dann wird mein menüeintrag Enabled (schwarz)

    Weis jemand wie ich diesen Eintrag in der MessageMap umgehen kann?
    Ich will nicht für jeden Menüeintrag eine eingene Funktion haben sondern ich fange die Message im OnCommand des MainFrames ab.

    Ich bin gespannt ob euch was einfällt.



  • schau mal in die MFC FAQ, da habe ich vor einiger Zeit schon mal etwas dazu geschrieben.



  • phlox81 schrieb:

    schau mal in die MFC FAQ, da habe ich vor einiger Zeit schon mal etwas dazu geschrieben.

    Hallo phlox81,

    der wesentliche Hinweis in Deinem FAQ kam von "Volle", das Zauberwort heist ON_COMMAND_RANGE

    Danke!


Anmelden zum Antworten