MFC菜单以及与菜单相关联的操作.ppt

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

菜单以及与菜单相关联的操作 消息的分类 标准消息 除WM_COMMAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。 命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 从CCmdTarget派生的类,都可以接收到这类消息。 通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。 一个类接收一个命令消息后, 文件做了哪些修改? (a)在类的定义中的消息映射中添加命令消息函数原 型 (b)在源文件的消息映射中用ON_COMMAND宏将菜单项的 ID号和命令消息响应函数进行关联 (c)在源文件中增加了命令消息响应函数。 它的形式跟Windows标准消息是一样的,不同的是ON_COMMAND宏。 添加2个菜单,ID值分别为IDM_UNDO和IDM_DELETE_ALL,分别用来删除最后画的一条直线和窗口中所有的直线。 (1)为视图类添加对这2个菜单项的消息响应 (2)OnUndo() { int nUpperBound=m_ptrArray.GetUpperBound (); if(nUpperBound0) return; CLine *pline=(CLine *)(m_ptrArray.GetAt (nUpperBound )); delete pline; m_ptrArray.RemoveAt (nUpperBound); Invalidate(); } (3) OnDeleteAll() { int nCount=m_ptrArray.GetSize (); for(int i=0;inCount;i++) { delete m_ptrArray.GetAt (i); } m_ptrArray.RemoveAll (); Invalidate(); } 命令更新 菜单项状态的维护是依赖于CN_UPDATE_COMMAND_UI消 息,谁捕获CN_UPDATE_COMMAND_UI消息,MFC就在其 创建一个CCmdUI对象。 可以通过手工或利用ClassWizard在消息映射中添加 ON_UPDATE_COMMAND_UI宏来捕获CN_UPDATE_COMMAND_UI 消息。 命令更新 利用ClassWizard为一个菜单添加命令更新消息后,在消息映射 中,一个宏,用来把该消息和处理这个消息的消息响应函数进行 关联了。 更新命令UI处理程序仅应用于弹出式菜单项上的项目,不能应用于永久显示的顶级菜单项目。如File、Edit等。 菜 单 获取菜单栏 菜单栏是属于框架的,在框架类中可以通过GetMenu方法去得到菜单栏。 CMenu类提供了函数对菜单进行操作。 GetSubMenu可以获取一个子菜单。 GetMenu和GetSubMenu都是返回指向菜单的指针,但前者是返回指向菜单栏的指针,而后者返回指向子菜单的指针。 右键单击弹出菜单 在VC中已做好。通过Project?Add To Project?组件,选择Popup Menu就可 。 选择增加一个弹出菜单到哪个窗口,不要选择框架。要增加到视图窗口。视图窗口始终覆盖在框架上,框架类是不能响应鼠标消息的,而右键单击是鼠标消息。 实现机制? 首先增加了一个菜单资源,然后增加了一个函数 OnContentMenu,在该函数内调用TrackPopupMenu来 绘制菜单 手工实现右键单击弹出菜单 (1)增加一个弹出菜单。Abc下有2个菜单,Show和Edit。 (2)为视图类捕获右键单击的消息。 (3)参考OnContextMenu。 CMenu menu; menu.LoadMenu(…). 【注意:】TrackPopupMenu函数的参数X,y是屏幕坐标,是相对于屏幕左上角来说的,而鼠标单击时,鼠标的位置是相对于视图左上角来讲的。是不同的坐标系统。所以要把视图坐标转换为屏幕坐标。函数ClientToScreen函数实现该功能。 对弹出菜单的菜单项进行命令响应 【注意:】在TrackPopupMenu中的菜单的拥有者中用

您可能关注的文档

文档评论(0)

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

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

1亿VIP精品文档

相关文档