VC++动态加入和删除菜单的方法.docx

上传人:牧羊曲112 文档编号:3168501 上传时间:2023-03-11 格式:DOCX 页数:4 大小:38.04KB
返回 下载 相关 举报
VC++动态加入和删除菜单的方法.docx_第1页
第1页 / 共4页
VC++动态加入和删除菜单的方法.docx_第2页
第2页 / 共4页
VC++动态加入和删除菜单的方法.docx_第3页
第3页 / 共4页
VC++动态加入和删除菜单的方法.docx_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《VC++动态加入和删除菜单的方法.docx》由会员分享,可在线阅读,更多相关《VC++动态加入和删除菜单的方法.docx(4页珍藏版)》请在三一办公上搜索。

1、VC+动态加入和删除菜单的方法VC+动态加入和删除菜单的方法 在应用程序中,往往要根据当前的操作来增加相应的菜单。动态增加菜单的方法有多 种,本文只讲述利用资源编辑器预创建菜单资源,然后在程序运行中动态加入到主菜单中去的方法。 一、用AppWizard建立一个单文档工程,默认一切选项。在WorkSpace的 ResourecView页中右击Menu资源,加入一个新的菜单,其ID为:IDR_MENU1。为 IDR_MENU1加入一个菜单项和相应的子菜单。如所示。 二、编辑IDR_MAINFRAME菜单,在【查看 】菜单项下面增加二个子菜单项。如所示。其属性如下: ID Caption IDC_A

2、DD 加入菜单 IDC_DELETE 删除菜单 三、要访问要菜单,可使用CWnd类的GetMenu成员函数、或使用全局函数 AfxGetMainWndGetMenu,它们都返回一个CMenu对象的指针。一旦得到Cmenu指 针,就可以对菜单进行各种操作。通过Cmenu 指针对菜单进行操作后,应使用Cmenu类的Detach成员函数从Cmenu对象中分离出菜 单,避免发生冲突。之后调用CWnd:DrawMenuBar重画菜单。 四、为实现加入、删除操作,我们用“ClassWizard”向导为IDC_ADD和IDC_DELETE增加 两个COMMAND消息映射函数,它们分别为CMainFrame:

3、OnAdd 和 CMainFrame:OnDelete。接着我们为其编写代码如下: void CMainFrame:OnAdd /加入菜单操作。 CMenuaddmenu,*mainmenu; if(!addmenu.LoadMenu(IDR_MENU1) /装入菜单资源。 MessageBox(菜单装入失败!,错误,MB_OK|MB_ICONERROR); return; /如装入失败,显示消息框,且返回。 CStringstr=颜色(&C); /要增加的菜单项的标签。 mainmenu=AfxGetMainWnd-GetMenu; /取得指向窗口菜单的Cmenu对象的指针。 mainmen

4、u-InsertMenu (1,MF_POPUP|MF_BYPOSITION|MF_STRING, (UINT)addmenu.GetSubMenu(0)-m_hMenu,str); /将弹出式菜单插入到第2项菜单之前。 / addmenu.GetSubMenu(0)-m_hMenu是被装入菜单的第一个菜单项的弹出式菜单的菜单句柄。 mainmenu-Detach; /将窗口菜单与Cmenu对象分离。 addmenu.Detach; /将资源菜单与Cmenu对象分离。 DrawMenuBar; /重画菜单。 Cmenu:InsertMenu的函数原形如下: BOOL InsertMenu( U

5、INT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ); 参数 nPosition:指定在那个菜单项前插入新菜单项。被参数nFlags用于以下列方式解释nPosition NFlags参数 NPosition参数的解释 MF_BYCOMMAND 指定参数给出巳存在的菜单项的命令ID号。此为缺省值。 MF_BYPOSITION 指定参数给出巳存在的菜单项的位置。第一项位于位置0。如果Nposition为-1,新菜单将添加到菜单尾。 参数 nFlags:指定Nposition、nIDNewItem、

6、lpszNewItem值如何被解释。 参数 nIDNewItem:指定新菜单项的命令ID号,或者,若nFlags被设置为MF_POPUP,则指定为弹出菜单的菜单句柄。若nFlags被设置为MF_SEPARATOR,那么参数nIDNewItem将被忽略。 参数 lpszNewItem:指定新菜单项的文本。被nFlags以下列方式解释 NFlags参数 LpszNewItem的解释 MF_STRING 包含指向以空格位终止符的字符串指针。它为缺省解释。 MF_SEPARATOR 参数将被忽略。 void CMainFrame:OnDelete /删除菜单操作。 CMenu *m ainmenu;

7、CStringstr; mainmenu=GetMenu; /取得指向窗口菜单的Cmenu对象的指针。 for(int i=mainmenu-GetMenuItemCount-1;i=0;i-) /取得菜单的项数。 mainmenu-GetMenuString(i,str,MF_BYPOSITION); /将指定菜单项的标签拷贝到指定的缓冲区。MF_BYPOSITION的解释见上。 if(str=颜色(&C) /如果是刚才我们增加的菜单项,则删除。 mainmenu-DeleteMenu(i,MF_BYPOSITION); break; mainmenu-Detach; /将窗口菜单与Cmenu对象分离。 DrawMenuBar; /重画菜单。 五、编译,运行程序,看看到底是怎样的!用这种方法动态增加菜单有它的好处:即我们可以事先为菜单ID编写好COMMAND、UPDATE_COMMAND_UI消息映射入口,在程序需要时动态的装入菜单即可。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号