在VS中动态添加,删除菜单项
来源:互联网 发布:网络打印机脱机怎么办 编辑:程序博客网 时间:2024/04/29 16:21
示例下载地址:http://download.csdn.net/detail/qq_23992597/9623998
在VC6.0中动态添加或者菜单项,是很容易的,有API可以直接操作.
有关菜单的操作主要用到CMenu类,当然也可用相应API函数,CMenu类只是MFC对API中操作菜单的函数的封装而已
不过能用类就尽量用类,类的组织方式好呗,代码看着也舒服。若是SDK编程,那就用API吧。
CMenu menuMain,menu1;//首先定义CMenu对象
一、创建菜单,有两种方法
1.用LoadMenu函数从资源加载 menuMain.LoadMenu(IDR_MAINFRAME);//从资源加载,这里使用SDI的主菜单资源
2.用CreateMenu函数创建 menu1.CreateMenu();//创建菜单,还没有菜单项
二、添加菜单项,可用AppendMenu()在菜单的最后加、InsertMenu()在指定的位置加. //ID_TEST1在Resource.h中定义,随便给个整数值,不要和已有的重复就行了 menu1.AppendMenu(MF_STRING,ID_TEST1,"Test1");//第一项菜单项
menu1.AppendMenu(MF_STRING,ID_TEST2,"Test2");//第二项菜单项
menu1.InsertMenu(1,MF_BYPOSITION|MF_STRING, (UINT)ID_TEST1,"ID_TEST1");//在第二项菜单项前添加新菜单项
三、添加子菜单 同样用AppendMenu()、InsertMenu()函数。不过要注意参数的设置。
menu1.AppendMenu(MF_BYPOSITION|MF_POPUP|MF_STRING, (UINT)menuMain.GetSubMenu(0)-m_hMenu,"子菜单"); //第二个参数是菜单的句柄HMENU
四、删除菜单 用DeleteMenu()、RemoveMenu()函数来删除指定位置的菜单/菜单项。
两者区别:如果菜单项是一个弹出式菜单,那么DeleteMenu和RemoveMenu之间的区别就很重要。DeleteMenu清除弹出式菜单,但RemoveMenu不清除它。一个是彻底的删除,一个只是移除
但是在vs中动态添加或者删除菜单项就比较麻烦了,应为微软购买了BCG的产品..使用的不在是CMenu,而是CMFCMenuBar.网上关于此类的介绍比较少
因为微软买了BCG那些东西,所以现在的MFC动态添加菜单选项和以前VC6.0上的不一样,需要在
BOOL CMainFrame::OnShowPopupMenu(CMFCPopupMenu *pMenuPopup)
中处理。
我新建了一个单文档工程来测试,下面是添加步骤:
0.在Resource.h文件中添加菜单选项的ID:
#define IDS_EDIT_MYITEM 1002
1.在CMainFrame的声明文件中添加函数声明:
BOOL OnShowPopupMenu(CMFCPopupMenu* pMenuPopup);
2.在CMainFrame类中添加函数实现:
- // CFrameWndEx::OnShowPopupMenu 的解释:Called by the framework when it displays a pop-up menu.
- BOOL CMainFrame::OnShowPopupMenu(CMFCPopupMenu *pMenuPopup)
- {
- // 在“Edit”菜单最下面添加了一个分割线和一个"MyItem"子项
- if(pMenuPopup == NULL)//处理断言错误
- return TRUE;
- int iIndex = -1;
- // 使用CommandToIndex()来获得菜单项的索引,然后根据索引来确定子菜单项的添加位置
- if (!CMFCToolBar::IsCustomizeMode() && (iIndex = pMenuPopup->GetMenuBar()->CommandToIndex(ID_EDIT_PASTE)) >= 0)
- {
- pMenuPopup->InsertSeparator(iIndex + 1);
- pMenuPopup->InsertItem(CMFCToolBarMenuButton(IDS_EDIT_MYITEM, NULL, -1, L"&MyItem "), iIndex + 2);
- }
- return CFrameWndEx::OnShowPopupMenu(pMenuPopup);
- }
================================================================
为了响应刚刚添加的那个菜单子项的命令消息,需要这样做:
3.在CMainFrame声明中添加函数声明:
afx_msg void OnEditMyItem();
4.在CMainFrame实现中添加命令消息映射:
ON_COMMAND(IDS_EDIT_MYITEM, &CMainFrame::OnEditMyItem)
这里为什么用ON_COMMAND呢?因为它是一种命令消息,windows有3种消息:标准消息、命令消息、通告消息。它们的处理彼此有异,请自行查阅更多资料,我在这里不多说了。
5.在CMainFrame实现中添加函数的实现:
void CMainFrame::OnEditMyItem(){ MessageBox(L"You cilcked EditMyItem");}
PS:当然,新建项目的时候可以选择“Standard MFC”,那样就可以用以前VC6.0和以前MFC那一套东西了~~~
在这里我们用到了一个类:CMFCMenuBar
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
CMFCMenuBar的继承关系:
CObject
CCmdTarget
CWnd
CBasePane
CPane
CMFCBaseToolBar
CMFCToolBar
CMFCMenuBar
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
示例下载地址:http://download.csdn.net/detail/qq_23992597/9623998
- 在VS中动态添加,删除菜单项
- MFC中菜单项的动态添加、删除与响应
- MFC中菜单项的动态添加、删除与响应
- 如何在MFC中动态添加菜单/菜单项、子菜单、右键菜单
- 如何动态添加删除菜单项?
- 动态添加删除Spinner菜单项
- 在VB中动态添加弹出菜单
- 动态添加菜单\删除菜单\插入菜单
- 下拉菜单Spinner用法 动态添加删除Spinner菜单项
- 动态添加/删除spinner菜单
- 动态添加/删除Spinner菜单
- 动态添加、插入、删除菜单
- 在table中动态添加删除一行
- 在系统菜单中添加菜单项
- 在系统菜单中添加菜单项
- Android中动态添加╱删除的Spinner菜单
- word中添加和删除菜单项
- 在vs2010+MFC中动态添加菜单选项
- 本地运行 MAYA 帮助文档
- 在JSP中如何使用JSTL(EL表达式)格式化日期
- 第三章 操作符
- U-BOOT-2016.07移植 (第一篇) 初步分析
- NPAPI和PPAPI开发
- 在VS中动态添加,删除菜单项
- php 数组 类对象 值传递 引用传递 区别
- HTTP幂等性
- canvas的drawImage()
- maven 下载源码
- 0907rman杂记
- Java学习提要——StringBuffer类基础
- jdk环境变量配置
- 如何在linux CentOS 上安装chrome 谷歌浏览器?