2010-09-09 24 views
9

Tôi muốn thêm một mục menu vào menu chính của tôi và sau đó điền nó vào các mục trong thời gian chạy. Làm thế nào tôi sẽ làm điều này? Và bên cạnh việc thêm các mục như thế nào tôi sẽ có một mục nhập bản đồ thông báo cho họ vì tôi không biết id?Menu động sử dụng mfc

Trả lời

15

Bạn có thể tạo một đối tượng CMenu động như thế này:

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

Sau đó thêm này sub-menu vào menu chính của bạn:

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

Đối với các bản đồ thông điệp, giả sử tất cả các mục trình đơn của bạn ID nằm trong một phạm vi nhất định, bạn có thể sử dụng ON_COMMAND_RANGE để ánh xạ toàn bộ dải ô thành một hàm duy nhất. Hàm này sẽ nhận được ID làm tham số và trong hàm, bạn có thể thực hiện các thao tác khác nhau dựa trên ID.

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); 
Các vấn đề liên quan