版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第3章
MFC菜单编程3.1菜单编程3.2菜单消息的传输机制3.3动态菜单操作3.4小结主要内容菜单分类菜单创建菜单加载与显示响应菜单命令更新菜单项菜单动态编辑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,MF_BYCOMMAND|MF_CHECKED);//通过IDb.设置缺省菜单项:每个子菜单最多只能有一个缺省菜单项方法一:GetMenu()->GetSubMenu(0)->SetDefaultItem(1,true);//通过索引方法二:GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN,false);//通过ID菜单的相关操作的实现方法
c.添加图形标记:方法一:通过IDCBitmapbitmap;//必须设置为全局对象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(ID_FILE_NEW,MF_BYCOMMAND,&bitmap,&bitmap);方法二:通过索引CBitmapbitmap;//必须设置为全局对象bitmap.LoadBitmap(IDB_BITMAP1);GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&bitmap,&bitmap);菜单的相关操作的实现方法d.使菜单无效,变灰//必须在构造函数中添加:m_bAutoMenuEnable=false;GetMenu()->GetSubMenu(0)->EnableMenuItem(ID_FILE_OPEN,MF_BYCOMMAND|MF_DISABLED|MF_GRAYED);e.移除菜单SetMenu(0);f.添加菜单CMenumenu;menu.LoadMenu(IDR_MAINFRAME);SetMenu(&menu);menu.Detach();位图大小(13*13)系统获得位图标记的大小:CStringstr;str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));MessageBox(str);3.3动态地创建菜单
动态地创建菜单可以使系统资源更加节省,在应用程序中动态创建菜单分两个步骤:1.调用函数创建空的弹出式菜单BOOLCreateMenu()BOOLCreatePopupMenu()2.调用函数AppendMenu或InsertMenu在该菜单中加入菜单项。3.增加菜单项
在菜单的尾部增加菜单项
BOOLAppendMenu(UINTdwFlags, //新加入的菜单项类型标识 UINTdwIDNewItem, //新加入菜单项的ID LPCTSTRlpNewItem //新加入的菜单项内容)
nFlags:MF_POPUP(弹出菜单);MF_SEPARATOR(分隔栏);MF_STRING(字符串)nIDNewItem:如果第一个参数为弹出菜单,则第二个参数为新菜单句柄;如果第一个参数为分隔栏,则第二个参数就忽略了lpszNewItem:菜单名称例如在“文件”菜单的末尾增加一项“关于”:AppendMenu(MF_STRING,201,“关于(&A)“);
(2)在菜单中插入菜单项
调用函数InsertMenu在菜单中插入新的菜单BOOLInsertMenu(UINTwPosition, //指定新菜单项插入的位置UINTdwFlag, //新加入的菜单项的信息UINTdwIDNweItem, //新加入的菜单项的标识LPCTSTRlpNewItem //新插入的菜单项的内容)
例如,在“文件”菜单的“退出”项之前加入“打印”菜单项;InsertMenu(2,MF_BYPOSITION|MF_STRING,IDM_PRINT,"打印(&P)");4.删除菜单项调用函数DeleteMenu删除菜单项:
BOOLDeleteMenu(
UINTwPosition,//要删除的菜单项的位置UINTdwFlag //对wPosition的解释)
例如,删除“文件”菜单中的“另存为”菜单项:DeleteMenu(IDM_SAVEAS,MF_BYCOMMAND)动态添加
CMenumenu; menu.CreatePopupMenu();//将这个弹出菜单模型装到总的菜单模型中 GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,"pop");//在尾部添加弹出菜单 menu.AppendMenu(MF_STRING,201,"1"); menu.AppendMenu(MF_SEPARATOR);//添加分割线 GetMenu()->InsertMenu(2,MF_BYPOSITION|MF_POPUP,(UINT)menu.m_hMenu,“插入popup菜单”);//插入菜单 //menu.DeleteMenu(0,MF_BYPOSITION);//删除菜单项 menu.Detach();//右键单击弹出菜单
(TrackPopupMenu)1)添加菜单资源(ID为IDR_MENU1)2)在view类中添加右键消息处理{ CMenumenu; menu.LoadMenu(IDR_MENU_COLOR); CMenu*p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 供应链管理中的培训与发展
- 2025年度洗碗间洗涤设备销售与安装合同3篇
- 2024年水产养殖技术研发租赁合同范本3篇
- 2022高考英语完形类和阅读类训练(6)及答案
- 【华普教育】2021年安徽省高三第二次高考模拟考试文综试题-扫描版含解析
- 大学生教育实习报告范文12篇
- 常见物质的物性参数
- 药品批发市场的服务创新与满意度提升考核试卷
- 骆驼乳制品加工考核试卷
- 集装箱道路运输与物流绿色发展政策考核试卷
- 2023北师大版六年级上册数学期末试卷(共8套)
- 企业的涉税风险
- 武汉大学抬头信签纸
- 新人教版七年级下册生物每课知识点总结
- 印刷作业指导书
- 浙江产业带分布情况
- 2022年农业示范基地建设工作总结
- 硬笔书法比赛方案精选
- 火力发电厂山谷型干贮灰场设计
- 柳宗元毛笔楷书字帖
- 电伴热带热计算表xls
评论
0/150
提交评论