- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
* * * * Fundamentals of Computers 制作:刘晓翔 JINAN University 暨南大学珠海学院《Windows编程》 Fundamentals of Computers 暨南大学珠海学院《Windows编程》 制作:刘晓翔 Fundamentals of Computers 暨南大学珠海学院《Windows编程》 制作:刘晓翔 JINAN University * 第五讲 菜单编程 * * 内容安排 菜单编程 菜单响应函数 基本菜单操作 MFC菜单命令更新机制 制作快捷菜单 动态菜单操作 * * 弹出式菜单与菜单项 MFC中,设置为Pop-up类型的菜单称为弹出式菜单,VC++默认顶层菜单为弹出式菜单,这种菜单不能响应命令。 将菜单的属性对话框中的Pop-up选项去掉,该菜单成为一个菜单项,对应有一个ID号,可以响应命令。 菜单响应函数 * * Windows消息的分类 标准消息 除WM_COMMAND之外,所有以WM_开头的消息。 从CWnd派生的类,都可以接收到这类消息。 命令消息 来自菜单、加速键或工具栏按钮的消息。这类消息都以WM_COMMAND呈现。在MFC中,通过菜单项的标识(ID)来区分不同的命令消息;在SDK中,通过消息的wParam参数识别。 从CCmdTarget派生的类,都可以接收到这类消息。 通告消息 由控件产生的消息,例如,按钮的单击,列表框的选择等均产生此类消息,为的是向其父窗口(通常是对话框)通知事件的发生。这类消息也是以WM_COMMAND形式呈现。 从CCmdTarget派生的类,都可以接收到这类消息。 菜单响应函数 * * 菜单命令响应函数与响应顺序 菜单相应命令:在ClassWizard中添加。 响应顺序:(示例) CMenuView CMenuDoc CMainFrame CMenuApp 菜单响应函数 * * 菜单命令路由的过程 当点击某菜单项时,最先接收到这个菜单命令消息的是框架类。 框架类把接收到的这个消息传给它的子窗口,即视类。视类根据命令消息映射机制查找自身是否对这个消息进行了响应,如果响应了,则调用自身相应响应函数。 如果视类没有对此命令消息作出响应,就交由文档类,文档类同样查找自身是否这个消息进行了响应,如果响应了,则调用自身相应响应函数。 如果文档类也未做出响应,就把这个命令消息交还给视类,后者再交还给框架类。 框架类查看自己是否对这个命令消息进行了响应,如果它也没有相应,就把这个菜单命令消息交给应用程序类,由后者来处理。 菜单响应函数 * * 内容安排 菜单编程 菜单响应函数 基本菜单操作 MFC菜单命令更新机制 制作快捷菜单 动态菜单操作 * * 基本菜单操作 菜单的结构 顶级菜单(菜单栏),依附于主框架上。CMenu* GetMenu() 子菜单(弹出菜单) CMenu* GetSubMenu(int nPos) 菜单项(注:分隔符也算一个菜单项) * * 基本菜单操作 标记菜单(在菜单项前面打上勾) GetMenu()-GetSubMenu(0)-CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED); GetMenu()-GetSubMenu(0)- CheckMenuItem(ID_FILE_NEW, MF_CHECKED); 注意:在使用索引的时候 “分隔符”也要算上。 UNIT CheckMenuItem(UINT nIDCheckItem, UINT nCheck) 实例一: 实例二: * * 基本菜单操作 图形标记菜单(在菜单项前面加上位图) UNIT SetMenuItemBitmaps(UINT nPosition, UINT nFlag, const CBitmap* pBmpUnchecked, const CBitmap* pBmpChecked) bmp1.LoadBitmap(IDB_BITMAP1); bmp2.LoadBitmap(IDB_BITMAP2); GetMenu()-GetSubMenu(0)-SetMenuItemBitmaps(0, MF_BYPOSITION, bmp1, bmp2); 注意:位图大小必须为13 x 13。bmp1、bmp2为主框类的成员对象;若为局部变量,菜单标记后要加上bmp.Detach() 实例: * * 基本菜单操作 禁用菜单项 UNIT EnableMenuItem(UINT nIDEnableItem, UINT nEnable) GetMenu()-GetSubMenu(0)-EnableMenuIte
文档评论(0)