天天看點

MFC動态建立菜單及添加相應

建一個基于對話框的工程,工程名為CreateMenu

為該對話框增加一個檔案菜單項和測試菜單項,如下圖所示

MFC動态建立菜單及添加相應
MFC動态建立菜單及添加相應

測試菜單項至少要有一個子菜單項

在對話框屬性中關聯該菜單

在resource.h中增加一個ID_TESTMENU宏

#define ID_TESTMENU          5000

在對話框中添加一個Button按鈕,建立消息映射,編輯代碼如下

void CCreateMenuDlg::OnButton1()       
{      
// TODO: Add your control notification handler code here      
char buf[2];      
//擷取頂級菜單      
CMenu* pMenu=GetMenu();      
//擷取1級菜單      
CMenu* pFileMenu=pMenu->GetSubMenu(0);      
CMenu* pTestMenu=pMenu->GetSubMenu(1);      
//添加2級菜單      
if(pTestMenu->GetSafeHmenu()==NULL)       
return;      
//添加一個2級彈出菜單,将"檔案"菜單項作為該菜單的子菜單      
pTestMenu->AppendMenu(MF_POPUP,(UINT)pFileMenu->m_hMenu,"檔案");      
//添加一個2級彈出菜單,該菜單的子菜單為空      
pTestMenu->AppendMenu(MF_POPUP,(UINT)pTestMenu->m_hMenu,"測試");      
//添加10個2級普通菜單      
for(UINT m_ID=1;m_ID<=10;m_ID++)      
{      
itoa(m_ID,buf,10);      
pTestMenu->AppendMenu(MF_SEPARATOR);      
pTestMenu->AppendMenu(      
MF_STRING,m_ID+ID_TESTMENU,"2級菜單"+CString(buf));      
}      
//添加n級菜單      
CMenu* pnMenu=pTestMenu->GetSubMenu(2);      
pnMenu->AppendMenu(MF_POPUP,(UINT)pnMenu->m_hMenu,"3級菜單");      
for(int i=0;i<5;i++)      
{      
pnMenu=pnMenu->GetSubMenu(0);      
if(pnMenu==NULL) return;      
itoa(i+4,buf,10);      
pnMenu->AppendMenu(      
MF_POPUP,(UINT)pnMenu->m_hMenu,buf + CString("級菜單"));      
}      
pnMenu->GetSubMenu(0)->AppendMenu(      
MF_STRING,ID_TESTMENU,"9級菜單");      
}      

響應單擊菜單的事件

添加OnCommand的消息映射,編輯代碼如下

BOOL CCreateMenuDlg::OnCommand(WPARAM wParam, LPARAM lParam)       
{      
// TODO: Add your specialized code here and/or call the base class      
UINT uMsg=LOWORD(wParam);      
char buf[2];      
if(uMsg==ID_TESTMENU)      
{      
MessageBox("HELLO!");      
}      
for(UINT i=1;i<=10;i++)      
{      
if(uMsg==ID_TESTMENU+i)      
{      
itoa(i,buf,10);      
MessageBox("HELLO! " + CString(buf));      
}      
}      
return CDialog::OnCommand(wParam, lParam);      

}

另一個介紹:

http://blog.csdn.net/liqing19850102/article/details/7471726

繼續閱讀