第3章MFC菜单编程.ppt
文本预览下载声明
主要内容 菜单分类 菜单创建 菜单加载与显示 响应菜单命令 更新菜单项 菜单动态编辑 3.1 菜单编程 菜单分类: 弹出式菜单 下拉式菜单 级联菜单 快捷菜单 3.1.1 创建菜单 创建菜单步骤: (1)添加一个自定义的菜单资源; (2)用菜单编辑器设计菜单; (3)将菜单加入应用程序; (4)为每个菜单命令添加消息映射。 3.1.1 创建菜单 明确几个点 菜单ID命名: ID_顶层菜单名_下一级菜单名…… 快捷键,例Alt+k 加速键,例Ctrl+k 3.1.1 创建菜单 演示添加菜单资源,使用菜单编辑器编辑菜单。 菜单命令项及其消息映射 MFC程序可以处理两种菜单消息: WM_COMMAND:为菜单命令消息; 菜单命令项消息映射宏格式是: ON_COMMAND(ID,消息响应函数名) ON_COMMAND(ID_FILE_NEW, OnFileNew) UPDATE_COMMAND_UI:为菜单更新消息,处理菜单状态的动态变化。如希望根据程序的执行状态,激活或禁用某些菜单项,设置选中标记,或更改菜单项文字等, 菜单命令项及其消息映射 用户点击菜单项后,会产生命令消息WM_COMMAND,消息的参数中会包含菜单项的ID号,以区别点击那个菜单项。 命令消息可以映射到视图、文档、框架或者应用程序类中。 命令消息处理路径:视图类→文档类→文档模板类→框架窗口类→应用程序类 菜单命令项及其消息映射 演示菜单的两种消息响应。尤其是UPDATE_COMMAND_UI消息响应,利用响应函数中传进来的CCmdUI对象指针可完成设置菜单项可使用,不可使用,变灰,设置标记菜单等操作 。 pCmdUI-Enable(false);// true和false 来设置能否使用或变灰 pCmdUI-SetCheck(true);// true和false 来设置标记 pCmdUI-SetText(“cut”); //改变菜单项文本内容 菜单的相关重要函数 1.CMenu* GetMenu( ) ;// 得到菜单指针 2.CMenu* GetSubMenu( ) ;// 得到子菜单指针,也就是弹出菜单指针 3.UINT CheckMenuItem( );// 将菜单项加上或去掉√(对号)标记 a.如果第一个参数是ID号,第二个参数必须是MF_BYCOMMAND | MF_CHECKED的组合 b.如果第一个参数是索引号,第二个参数必须是MF_BYPOSITION | MF_CHECKED的组合 菜单的相关重要函数 4. BOOL SetDefaultItem();// 设置缺省菜单,也就是将菜单项粗体显示 a.如果第一个参数是索引号,第二个参数必须是true b.如果第一个参数是ID号,第二个参数必须是false * 注 :一个子菜单最多只能有一个缺省菜单项 5. BOOL SetMenuItemBitmaps( );// 设置位图标记,标记大小为13*13像素 a.如果第一个参数是ID号,第二个参数必须是MF_BYCOMMAND b.如果第一个参数是索引号,第二个参数必须是MF_BYPOSITION 第三个参数是没有选中时的位图;第四个参数是标记时的位图 菜单的相关重要函数 6. UINT EnableMenuItem();//使菜单项有效,无效,或变灰 a.如果第一个参数是ID号,第二个参数必须是MF_BYCOMMAND 和有效,无效,或变灰 的组合 b.如果第一个参数是索引号,第二个参数必须是MF_BYPOSITION 和有效,无效,或变灰 的组合 * 注 :若让此函数生效,必须在CMainFrame构造函数中添加:m_bAutoMenuEnable =false。 菜单的相关重要函数 7. BOOL SetMenu( CMenu* pMenu );//在当前窗口上设置新菜单或移除菜单。 如果参数为0,则是移除菜单。 自己创建菜单 { CMenu menu; menu.LoadMenu(IDR_MENU1); SetMenu(menu); menu.Detach(); } 8. HMENU Detach( );// 如果将CMenu 对象设置为局部对象,使用Detach()从menu对象中分离窗口菜单句柄,从而当menu对象析构的时候窗口菜单资源不随之销毁 。 菜单的相关操作的实现方法 a.添加对号标记: 方法一: GetMenu()-GetSubMenu(0)-CheckMenuItem(0, MF_BYPOSITION | MF_CHECKED );//通过索引 方法二: GetMenu()-GetSubMenu(0)-CheckMenuItem(ID_FILE_NEW
显示全部