簡體   English   中英

使用mfc的動態菜單

[英]Dynamic menu using mfc

我想在我的主菜單中添加一個菜單項,然后在運行時用項填充它。 我該怎么做? 除了添加項目,我怎么會有他們的消息映射條目,因為我不知道ID?

您可以像這樣動態創建CMenu對象:

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

然后將此子菜單添加到主菜單:

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

對於消息映射,假設所有菜單項ID都在一定范圍內,您可以使用ON_COMMAND_RANGE將整個范圍映射到單個函數。 此函數將接收ID作為參數,並且在函數內,您可以根據ID執行不同的操作。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM