第3章-MFC菜单编程.ppt
主要内容菜单分类菜单创建菜单加载与显示响应菜单命令更新菜单项菜单动态编辑3.1菜单编程菜单分类:弹出式菜单下拉式菜单级联菜单快捷菜单3.1.1创建菜单创建菜单步骤:(1)添加一个自定义的菜单资源;(2)用菜单编辑器设计菜单;(3)将菜单加入应用程序;(4)为每个菜单命令添加消息映射。3.1.1创建菜单明确几个点菜单ID命名:ID_顶层菜单名_下一级菜单名……快捷键,例Alt+k加速键,例Ctrl+k3.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.UINTCheckMenuItem();//将菜单项加上或去掉√(对号)标记a.如果第一个参数是ID号,第二个参数必须是MF_BYCOMMAND|MF_CHECKED的组合b.如果第一个参数是索引号,第二个参数必须是MF_BYPOSITION|MF_CHECKED的组合菜单的相关重要函数4.BOOLSetDefaultItem();//设置缺省菜单,也就是将菜单项粗体显示a.如果第一个参数是索引号,第二个参数必须是trueb.如果第一个参数是ID号,第二个参数必须是false*注:一个子菜单最多只能有一个缺省菜单项5.BOOLSetMenuItemBitmaps();//设置位图标记,标记大小为13*13像素a.如果第一个参数是ID号,第二个参数必须是MF_BYCOMMANDb.如果第一个参数是索引号,第二个参数必须是MF_BYPOSITION第三个参数是没有选中时的位图;第四个参数是标记时的位图菜单的相关重要函数6.UINTEnableMenuItem();//使菜单项有效,无效,或变灰a.如果第一个参数是ID号,第二个参数必须是MF_BYCOMMAND和有效,无效,或变灰的组合b.如果第一个参数是索引号,第二个参数必须是MF_BYPOSITION和有效,无效,或变灰的组合*注:若让此函数生效,必须在CMainFrame构造函数中添加:m_bAutoMenuEnable=false。菜单的相关重要函数7.BOOLSetMenu(CMenu*pMenu);//在当前窗口上设置新菜单或移除菜单。如果参数为0,则是移除菜单。自己创建菜单{CMenumenu;menu.LoadMenu(IDR_MENU1);SetMenu(menu);menu.Detach();}8.HMENUDetach();//如果将CMenu对象设置为局部对象,使用Detach()从menu对象中分离窗口菜单句柄,从而当menu对象析构的时候窗口菜单资源不随之销毁。菜单的相关操作的实现方法
a.添加对号标记:方法一:GetMenu()-GetSubMenu(0)-CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);//通过索引方法二:GetMenu()-GetSubMenu(0)-CheckMenuItem(ID_FILE_NEW