版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
面向对象与可视化
程序设计
--VisualC++编程
主讲教师:
唐龙教授
(计算机科学与技术系)
黄维通博士
(计算机与信息管理中心)
清华大学
2001年2月7/11/20261第十二章
菜单类及其应用7/11/20262内容提要菜单类简介菜单类控件的应用7/11/20263§12.1.
菜单类简介7/11/20264,,1.菜单菜单是用户与应用程序交互的最常用手段。菜单存放在资源脚本中,在程序运行时调用。一个菜单项必须包含两部分:菜单项名称——字符串构成,例如:file菜单项标识符ID——整数值,可用整数常量表示菜单标识符ID在资源的头文件Resource.h中定义,前缀IDM指明是菜单项,如:#defineIDM_MENU1129在菜单资源,必须链接到类中,通过提供类方法来处理每个菜单项。7/11/20265IDR_MENU1MENUDISCARDABLEBEGIN
POPUP"&File" //定义File菜单
BEGIN //菜单File定义开始
MENUITEM"&Voice",IDC_VOICE_MENU //菜单项MENUITEM"&Show",IDC_SHOW_MENU //菜单项MENUITEMSEPARATOR //分隔线MENUITEM"&Exit",IDC_EXIT_MENU //菜单项
END //菜单File定义结束POPUP"&Help" //定义Help菜单
BEGIN
//菜单Help定义开始MENUITEM"&About",IDC_ABOUT_MENU //菜单项
END //菜单Help定义结束END2.菜单结构菜单模板用一种很简单的结构在资源脚本文件中定义,一个菜单资源模板实例如下:7/11/20266
3.CMenu类CMenu类是Cobject类直接派生的。CMenu类提供了许多处理菜单和菜单项的方法:构造方法;菜单操作方法;菜单项操作方法;虚拟方法。7/11/20267
3.CMenu类(续)构造方法用于建立Windows菜单,并在运行时将它们附加到CMenu对象上,7/11/202683.CMenu类(续)菜单操作方法用于处理菜单的顶层操作,只有两个方法:DeleteMenu()删除指定的菜单项(包括附属的级连菜单项);TrackPopupMenu()在一个指定的位置显示一个快捷菜单。7/11/202693.CMenu类(续)菜单项操作方法有多种用于处理指定菜单项操作7/11/202610§12.2.
菜单类编程实例7/11/2026111.应用程序的实现功能主窗口标题为ApplicationofMenu。有三个按钮:Voice、Show和Exit。有两个菜单:File和Help。File下拉出三个菜单项:Voice、Show和Exit。单击Vioce选项,可听到PC机喇叭发出蜂鸣声单击Show,则弹出对话框,显示信息“ThisisaSampleofaddingmenu”。单击Exit,则退出。7/11/202612主窗口布局如下图;7/11/2026132.编程过程建立工程文件:用MFCAppWizard(exe)工程项目名称:Menu建立主窗口标题为ApplicationofMenu的应用程序。可视化编程:设计界面连接变量修改特性添加代码7/11/2026143.界面设计在Menu的工作区中选择ResourceView在名为IDD_MENU_DIALOG的对话框作为应用程序的主窗口中进行界面设计。对话框中按钮的设计借助于工具窗,在主窗口中安排三个命令按钮。在命令按钮上单击右键,选Propertires在PuchButtonPropertires的General上,输入相应的ID和Caption重复三次,完成了三个按钮的设计。7/11/2026153.界面设计(续)设计的三个按钮属性对象
ID Caption命令按钮 IDC_VOICE_BUTTON &Voice命令按钮
IDC_SHOW_BUTTON &Show 命令按钮
IDC_EXTT_BUTTON &Exit 7/11/202616(a)InsertResource对话框(b)选择Menu项(c)单击按钮New,加一菜单资源对话框中菜单的设计插入资源Insert->Resource,显示nsertResource对话框在资源列表选择Menu项单击按钮New
,在资源文件Menu.rc中加一菜单资源。7/11/2026174.给菜单连接一个类作为一个对象,菜单必须与一个类连接。这个菜单是对话框中的一个资源,将它与对话框的派生类CMenuDlg相连接。菜单IDR_MENU1连接了一个类,可调用该类的成员函数和成员变量。7/11/2026185.连接菜单和应用程序的主窗口为了在主窗口中显示菜单,菜单还应连接主窗口。菜单与主窗口对话框(即IDD_MENU_DIALOG)的连接:在Menu工作区的ResourceView选项卡中,双击Dialog文件夹中的IDD_MENU_DIALOG,弹出IDD_MENU_DIALOG对话框。在对话框内,单击鼠标右键,在快捷菜单中选择Properties命令,在对话框中的Menu组合框中选择IDD_MENU17/11/202619(1)给菜单File的Exit选项编写代码voidCMenuDlg::OnExitMenu(){ OnOK();}6.应用程序的代码编程(2)给File菜单的Voice项连接代码voidCMenuDlg::OnVioceMenu(){MessageBeep((WORD)-1);DWORDiTime=GetCurrentTime()while(GetCurrentTime()<iTime+500)MessageBeep((WORD)-1);//间隔500毫秒,发出一声蜂鸣}7/11/202620(3)给File菜单的Show项连接代码voidCMenuDlg::OnShowMenu(){MessageBox(”Thisissampleofaddingamenu.”);}(4)给Help菜单的About项连接代码voidCMenuDlg::OnAboutMeenu(){MessageBox(”Thisisasample.”);}7/11/202621(5)给命令按钮连接代码voidCmenudlg::OnVioceButton(){
OnVioceMenu();}voidCMenuDlg::OnShowButton(){
OnShowMenu();}voidCMenuDlg::OnExitButton(){
OnExitMenu();}7/11/202622[例2-8]创建一个带有“时间”的菜单,“时间”菜单中包含“年、月、日”、“小时、分、秒”和“退出”选项,其中选择“年、月、日”时,在窗口的对话框中显示当前的日期,选择“小时、分、秒”时,在对话框中显示是当前的时间。本例的工程文件名为12_5。7/11/202623(1)MFC->AppWizardStep1->Dialogbased(2)给对话框添加菜单。Insert->Resource,在Resourcetype->Menu->New按钮为应用程序添加菜单资源->设置菜单项属性,各菜单项的属性如表所示对象 ID Caption 菜单 时间(&T) 菜单项 ID_YEAR_MENU 年、月、日(&D) 菜单项 ID_HOUR_MENU 小时、分钟、秒(&H)菜单项 ID_EXIT_MENU 退出(&X) 7/11/202624-〉在菜单上单击鼠标右键-〉在弹出菜单中选ClassWizard-〉出现了AddClass对话框-〉选择Selectanexistingcalss选项,单击OK按钮,-〉在弹出的对话框中选择CMy12_5Dlg类,这样就把菜单加入到对话框类中。-〉在ResourceView选项卡中打开Dialog资源组,双击IDD_MY12_5_DIALOG,如下图。鼠标右键-〉Properties菜单项,在Menu列表框中选择编辑过的菜单的ID:ID_MENU1。这样就把菜单加入到对话框中。7/11/202625ID 变量 ID_YEAR_EDIT m_Year_EditID_MONTH_EDIT m_Month_EditID_DAY_EDIT m_Day_EditID_HOUR_EDIT m_Hour_EditID_MINUTE_EDIT m_Minute_EditID_SECOND_EDIT m_Second_EditID_EXIT_BUTTON E&xit7/11/202626 菜单项的消息处理函数菜单项ID 消息 消息处理函数 ID_YEAR_MENU COMMAND OnYearMenu() ID_HOUR_MENU COMMAND OnHourMenu() ID_EXIT_MENU COMMAND OnExitMenu()voidCMy12_5Dlg::OnYearMenu()//给“年、月、日”菜单项消息处理函数{structtm*newtime; //定义tm结构,存贮时间time_tlong_time; //定义保存时间的变量charbuffer[10];time(&long_time); //获取时间newtime=localtime(&long_time);//时间转换//将年月日输出到编辑框中._itoa(newtime->tm_year+1900,buffer,10);//tm_year是当前年份和1900之差m_Year_Edit.SetWindowText((LPCTSTR)(buffer));_itoa(newtime->tm_mon+1,buffer,10); //tm_mon是当前月份m_Month_Edit.SetWindowText((LPCTSTR)(buffer));_itoa(newtime->tm_mday,buffer,10); //tm_mday是当前日m_Day_Edit.SetWindowText((LPCTSTR)(buffer));}7/11/202627voidCMy12_5Dlg::OnHourMenu()//给菜单项“小时、分、秒”加入代码{structtm*newtime; //定义tm结构,保存时间time_tlong_time; //定义保存时间的长整型变量charbuffer[10];time(&long_time); //获取时间newtime=localtime(&long_time); //时间转换//将小时,分钟,秒输出到编辑框中._itoa(newtime->tm_hour,buffer,10); //tm_hour是当前小时m_Hour_Edit.SetWindowText((LPCTSTR)(buffer));_itoa(newtime->tm_min+1,buffer,10); //tm_min是当前分钟m_Minute_Edit.SetWindowText((LPCTSTR)(buffer));_itoa(newtime->tm_sec,buffer,10); //tm_sec是当前秒m_Second_Edit.SetWindowText((LPCTSTR)(buffer));}7/11/202628(第十二章)
完7/11/202629第11-12章课后练习题编写一个程序,对每组4个元素的10组数据进行管理,用用按键/下拉菜单操作实现功能包括:输入修改数据;显示一组数据;对一组数据求:最大值;最小值;平均值;均方差;[注]11月12日前完成7/11/2026301、字体安装与设置如果您对PPT模板中的字体风格不满意,可进行批量替换,一次性更改各页面字体。在“开始”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年事业编石油真题卷结合培训
- 《电工电子技术》-2.酒精浓度检测电路设计与调试-任务单
- 幼儿园教师综合素质考试试题三套参考答案
- 鸡泽县2025-2026学年数学四下期中复习检测试题含答案
- 中国火腿肠市场营销模式创新与投资发展战略规划研究报告
- 高碑店市2025届数学三年级第一学期阶段综合测试模拟试题(含答案解析)
- 跨境电商海外仓价格协议2026
- 再生医学在消化系统疾病治疗中的研发趋势分析
- 中国环保基金行业深度评估与未来发展策略分析研究报告
- 2026辽宁抚顺市部分市直单位公益性岗位人员招聘12人模拟试卷(有一套)附答案详解
- 2026年骨科专科医师规范化培训试题及答案详解
- 2026年郑州市十校4月高一语文期中联考作文范文3篇:“宇宙级烟火气”“创造力与探索精神”
- GB/T 5464-2026建筑材料不燃性试验方法
- 涉爆粉尘作业安全培训教育课件
- 2025-2026学年沪科版七年级数学上册期末质量检测卷一(含答案)
- GB/T 45629.2-2025信息技术数据中心设备和基础设施第2部分:建筑结构
- 2025年陕西水务发展集团招聘考试笔试试题附答案
- 雨课堂学堂在线学堂云《插画设计(西安美术学院)》单元测试考核答案
- 四川省房屋建筑工程消防设计技术审查要点(2025年版)
- 液压基础知识培训入门课件
- 定向钻施工技术交底详细方案
评论
0/150
提交评论