2010-09-09 25 views
9

Ana menümüme bir menü öğesi eklemek ve daha sonra çalışma zamanında öğelerle doldurmak istiyorum. Bunu nasıl yapardım? Ve ürün ekledikten sonra, kimliğini bilmediğimden, onlar için bir mesaj haritası girişi nasıl olurdu?mfc kullanarak dinamik menü

cevap

15

Böyle dinamik bir CMenu nesnesi oluşturabilirsiniz: mesaj haritası gelince

wnd->GetMenu()->AppendMenu(MF_POPUP, (UINT_PTR)menu->m_hMenu, "Menu Name"); 

, tüm menü öğesini varsayarak:

CMenu *menu = new CMenu; 
menu->CreatePopupMenu(); 
// Add items to the menu 
menu->AppendMenu(MF_STRING, menuItemID, "Text"); 
... 

Sonra ana menüye bu alt menü ekle Kimlikler belirli bir aralıkta, tüm aralığı tek bir işlevle eşleştirmek için ON_COMMAND_RANGE'u kullanabilirsiniz. Bu işlev, kimliği bir parametre olarak alır ve işlev içinde kimliğe göre farklı işlemler gerçekleştirebilirsiniz.

8
define the menu's using #define 

#define ID_SHOW 2002 
#define ID_HIDE 2004 

//create a menu object for main menu 
CMenu *menu = new CMenu(); 
menu->CreateMenu(); 

//another menu object for submenu 
CMenu *subMenu = new CMenu(); 
subMenu->CreatePopupMenu(); 
subMenu->AppendMenu(MF_STRING, ID_HIDE, _T("four")); 
subMenu->AppendMenu(MF_STRING, ID_SHOW, _T("three")); 
//append submenu to menu 
menu->AppendMenu(MF_POPUP|MF_STRING, (UINT)subMenu->m_hMenu, _T("Advanced")); 
SetMenu(menu); 
0
CMenu menuPopup; 
    menuPopup.LoadMenu(IDR_CNTXT_PLAN); 
subMenu.CreatePopupMenu(); 
subMenu.AppendMenu(MF_STRING, MENU1,"Menu1"); 
subMenu.AppendMenu(MF_STRING, MENU2,"Menu2"); 
CMenu* pMenu = menuPopup.GetSubMenu(0); 
    pMenu->InsertMenu(0,MF_BYPOSITION|MF_POPUP,(UINT)subMenu.m_hMenu,"Layers"); 
    menuPopup.GetSubMenu(0)->InsertMenu(1,MF_BYPOSITION|MF_SEPARATOR,0,""); 
menuPopup.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this); 
İlgili konular