2010-09-09 12 views
9

का उपयोग कर गतिशील मेनू मैं अपने मुख्य मेनू में एक मेनू आइटम जोड़ना चाहता हूं और फिर इसे रन टाइम पर आइटम के साथ पॉप्युलेट करना चाहता हूं। यह मैं कैसे करूंगा? और आइटम जोड़ने के अलावा मेरे पास उनके लिए संदेश मैप प्रविष्टि कैसे होगी क्योंकि मुझे आईडी नहीं पता है?एमएफसी

उत्तर

15

आप इस तरह गतिशील रूप से एक CMenu वस्तु बना सकते हैं:

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

संदेश नक्शे के लिए के रूप में, अपने सभी मेनू आइटम संभालने:

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

फिर अपने मुख्य मेनू में इस उप मेनू जोड़ने आईडी एक निश्चित सीमा के भीतर हैं, आप एक ही फ़ंक्शन में संपूर्ण श्रेणी को मैप करने के लिए ON_COMMAND_RANGE का उपयोग कर सकते हैं। यह फ़ंक्शन आईडी को पैरामीटर के रूप में प्राप्त करेगा, और फ़ंक्शन के भीतर, आप आईडी के आधार पर अलग-अलग संचालन कर सकते हैं।

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); 
संबंधित मुद्दे