网站大量收购闲置独家精品文档,联系QQ:2885784924

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

  1. 1、本文档共3页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC动态加入和删除菜单的方法

VC++动态加入和删除菜单的方法在应用程序中,往往要根据当前的操作来增加相应的菜单。动态增加菜单的方法有多种,本文只讲述利用资源编辑器预创建菜单资源,然后在程序运行中动态加入(或删除)到主菜单中去的方法。一、用AppWizard建立一个单文档工程,默认一切选项。在WorkSpace(工作空间)的ResourecView页中右击Menu资源,加入一个新的菜单,其ID为:IDR_MENU1。为IDR_MENU1加入一个菜单项和相应的子菜单。如(图一)所示。二、编辑IDR_MAINFRAME菜单(ID为IDR_MAINFRAME的菜单一般均为主菜单),在【查看(V)】菜单项下面增加二个子菜单项。如(图二)所示。其属性如下:IDCaptionIDC_ADD加入菜单IDC_DELETE删除菜单三、要访问要菜单,可使用CWnd类的GetMenu()成员函数、或使用全局函数AfxGetMainWnd()―GetMenu(),它们都返回一个CMenu对象的指针。一旦得到Cmenu指针,就可以对菜单进行各种操作(装入、增加、插入,删除,更新等等)。通过Cmenu指针对菜单进行操作后,应使用Cmenu类的Detach()成员函数从Cmenu对象中分离出菜单,避免发生冲突。之后调用CWnd::DrawMenuBar()重画菜单。四、为实现加入、删除操作,我们用“ClassWizard”向导为IDC_ADD和IDC_DELETE增加两个COMMAND消息映射函数,它们分别为CMainFrame::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对象的指针。 mainmenu-InsertMenu (1,MF_POPUP|MF_BYPOSITION|MF_STRING, (UINT)addmenu.GetSubMenu(0)- m_hMenu,str); //将弹出式菜单插入到第2项菜单之前(菜单项从0开始计算)。 // addmenu.GetSubMenu(0)- m_hMenu是被装入菜单的第一个菜单项的弹出式菜单的菜单句柄。 mainmenu-Detach(); //将窗口菜单与Cmenu对象分离。 addmenu.Detach(); //将资源菜单(IDR_MENU1)与Cmenu对象分离。 DrawMenuBar(); //重画菜单。 } Cmenu::InsertMenu的函数原形如下: BOOL InsertMenu( UINT nPosition, UINT nFlags, UINT nIDNewItem = 0, LPCTSTR lpszNewItem = NULL ); 参数 nPosition:指定在那个菜单项前插入新菜单项。被参数nFlags用于以下列方式解释nPositionNFlags参数 NPosition参数的解释 MF_BYCOMMAND 指定参数给出巳存在的菜单项的命令ID号。此为缺省值。 MF_BYPOSITION 指定参数给出巳存在的菜单项的位置。第一项位于位置0。如果Nposition为-1,新菜单将添加到菜单尾。 参数 nFlags:指定Nposition、nIDNewItem、lpszNewItem值如何被解释。 参数 nIDNewItem:指定新菜单项的命令ID号,或者,若nFlags被设置为MF_POPUP,则指定为弹出菜单的菜单句柄(HMENU)。若nFlags被设置为MF_SEPARATOR,那么参数nIDNewItem将被忽略。 参数 lpszNewItem:指定新菜单项的文本。被nFlags以下列方式解释 NFlags参数 LpszNewItem的解释 MF_STRING 包含指向以空格位终止符的字符串指针。它为缺省解释。 MF_SEPARATOR 参数将被忽略。 void CMainFrame::OnDelete() //删除菜单操作。 { CMenu *mainmenu;CStringstr;mainmenu=GetMenu(); //取得指向窗口菜单的Cmenu对象的指针。for(int i=mainmenu-GetMenuItemCo

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档