2010-09-09 19 views
9

Chciałbym dodać pozycję menu do mojego menu głównego, a następnie zapełnić ją elementami w czasie wykonywania. Jak to zrobić? A poza dodawaniem przedmiotów, jak miałbym dla nich wpis mapy wiadomości, ponieważ nie znam identyfikatora?Dynamiczne menu przy użyciu mfc

Odpowiedz

15

Można utworzyć CMenu obiekt dynamicznie tak:

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

Następnie dodać podmenu do menu głównego:

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

jak dla mapie wiadomości, zakładając całą swoją pozycję menu Identyfikatory mieszczą się w pewnym zakresie, możesz użyć ON_COMMAND_RANGE, aby odwzorować cały zakres na jedną funkcję. Ta funkcja otrzyma ID jako parametr, aw ramach tej funkcji można wykonywać różne operacje na podstawie identyfikatora.

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); 
Powiązane problemy