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ü
9
A
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);