您的位置:首页 > 其它

MFC 对话框中动态创建N级菜单以及响应事件

2014-05-16 12:28 731 查看
创建一个基于对话框的工程,工程名为CreateMenu

为该对话框增加一个文件菜单项和测试菜单项,如下图所示







测试菜单项至少要有一个子菜单项

在对话框属性中关联该菜单

在resource.h中增加一个ID_TESTMENU宏

#defineID_TESTMENU5000

在对话框中添加一个Button按钮,建立消息映射,编辑代码如下

voidCCreateMenuDlg::OnButton1()

[code]{
//TODO:Addyourcontrolnotificationhandlercodehere

charbuf[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(UINTm_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(inti=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级菜单");

}

[/code]

响应单击菜单的事件

添加OnCommand的消息映射,编辑代码如下


BOOLCCreateMenuDlg::OnCommand(WPARAMwParam,LPARAMlParam)

[code]{
//TODO:Addyourspecializedcodehereand/orcallthebaseclass

UINTuMsg=LOWORD(wParam);

charbuf[2];

if(uMsg==ID_TESTMENU)

{

MessageBox("HELLO!");

}

for(UINTi=1;i<=10;i++)

{

if(uMsg==ID_TESTMENU+i)

{

itoa(i,buf,10);

MessageBox("HELLO!"+CString(buf));

}

}

returnCDialog::OnCommand(wParam,lParam);

}

[/code]

运行结果:





源码下载
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: