`
kanwoerzi
  • 浏览: 1640373 次
文章分类
社区版块
存档分类
最新评论

动态创建菜单

 
阅读更多

动态创建菜单
1:在对话框中定义菜单对象CMenu m_MainMenu;在初始化函数中使用CreateMenu()创建菜单
2:对于每个层次定义一个临时惨淡变量popMenu,调用CreatePopMenu()方法创建弹出式菜单。
3:调用m_MainMenu对象的AppendMenu()将popMenu弹出式菜单插入到m_MainMenu中,
这就完成了一个顶层菜单的创建
4调用popMenu的AppendMenu()方法创建菜单项
注意:在从低层次转到高层次时需要调用Detach()方法分离菜单句柄,
5利用SetMenu()设置对话框菜单,千万别忘记这一步
6:在对话框消息映射部分添加命令消息映射宏,使相应的方法与命令ID关联
只需添加ON_COMMAND(菜单的ID,函数名)就可以了
Example

/*在初始化函数中*/
m_MainMenu.CreateMenu(); //创建菜单
CMenu popMenu; //定义一个弹出式菜单
popMenu.CreatePopupMenu(); //创建弹出式菜单
m_MainMenu.AppendMenu(MF_POPUP,(UINT)popMenu.m_hMenu,"系统");
CMenu subMenu;
subMenu.CreateMenu();//再次创建弹出式菜单
popMenu.AppendMenu(MF_POPUP,(UINT)subMenu.m_hMenu,"系统登录");
subMenu.AppendMenu(MF_STRING,ID_ADMINILOGIN,"管理员登录");
subMenu.AppendMenu(MF_SEPARATOR,0,"");//创建分隔条
subMenu.AppendMenu(MF_STRING,ID_COMMONLOGIN,"普通用户登录");
popMenu.Detach();//分离菜单句柄
popMenu.CreatePopupMenu();//重新创建弹出式菜单
m_MainMenu.AppendMenu(MF_STRING,(UINT)popMenu.m_hMenu,"帮助");
SetMenu(&m_MainMenu); //设置对话框菜单

BEGIN_MESSAGE_MAP(CDymanicMenuDlg, CDialog)
//{{AFX_MSG_MAP(CDymanicMenuDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_COMMAND(ID_ADMINILOGIN,OnAdminiLogin)
ON_COMMAND(102,OnCommonLogin)//id也可以用数值表示
END_MESSAGE_MAP()

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics