面向对象与可视化程序设计第十一讲(菜单设计).ppt

上传人:cn****1 文档编号:568036025 上传时间:2024-07-23 格式:PPT 页数:18 大小:262KB
返回 下载 相关 举报
面向对象与可视化程序设计第十一讲(菜单设计).ppt_第1页
第1页 / 共18页
面向对象与可视化程序设计第十一讲(菜单设计).ppt_第2页
第2页 / 共18页
面向对象与可视化程序设计第十一讲(菜单设计).ppt_第3页
第3页 / 共18页
面向对象与可视化程序设计第十一讲(菜单设计).ppt_第4页
第4页 / 共18页
面向对象与可视化程序设计第十一讲(菜单设计).ppt_第5页
第5页 / 共18页
点击查看更多>>
资源描述

《面向对象与可视化程序设计第十一讲(菜单设计).ppt》由会员分享,可在线阅读,更多相关《面向对象与可视化程序设计第十一讲(菜单设计).ppt(18页珍藏版)》请在金锄头文库上搜索。

1、第第 12章章 菜单设计菜单设计 用户与应用程序的交互通常是从菜单栏中选择命令或用键用户与应用程序的交互通常是从菜单栏中选择命令或用键盘加速器的形式,因此,菜单和加速器的资源在盘加速器的形式,因此,菜单和加速器的资源在VC+编程中编程中是很重要的。是很重要的。12.1 菜单简介菜单简介 菜单一般存放在资源脚本中,在程序运行时才调用,一个菜单一般存放在资源脚本中,在程序运行时才调用,一个菜单项一般有两个必要的部分,它们分别是菜单项一般有两个必要的部分,它们分别是字符串名字符串名如如filefile和和整数标识符整数标识符,一般来说,菜单的标识符,一般来说,菜单的标识符IDID在资源的头文件在资源

2、的头文件( (Resource.h)Resource.h)中定义,如:中定义,如:# #define IDM_MENU1 129define IDM_MENU1 129 其中,前缀其中,前缀IDMIDM指明是菜单项,在菜单资源创建后,必指明是菜单项,在菜单资源创建后,必须将它链接到类中,通过提供类方法来处理每个菜单项。须将它链接到类中,通过提供类方法来处理每个菜单项。112.1.2 菜单结构菜单结构 菜单模板用一种很简单的结构在资源脚本文件中定义,菜单模板用一种很简单的结构在资源脚本文件中定义,下面就是一个菜单资源模板下面就是一个菜单资源模板IDR_MENU1 MENU DISCARDABLE

3、 IDR_MENU1 MENU DISCARDABLE BEGINBEGIN POPUP &FilePOPUP &File / /菜单名菜单名 BEGINBEGIN / /菜单菜单FileFile开始开始 MENUITEM &Voice, IDC_VOICE_MENU /MENUITEM &Voice, IDC_VOICE_MENU /菜单项菜单项 MENUITEM &Show, IDC_SHOW_MENU /MENUITEM &Show, IDC_SHOW_MENU /菜单项菜单项 MENUITEM SEPARATORMENUITEM SEPARATOR / /分隔线分隔线 MENUITEM

4、 &Exit, IDC_EXIT_MENU /MENUITEM &Exit, IDC_EXIT_MENU /菜单项菜单项 ENDEND / /菜单菜单FileFile结束结束 POPUP &HelpPOPUP &Help / /定义定义HelpHelp菜单菜单 BEGINBEGIN MENUITEM &About, IDC_ABOUT_MENU / MENUITEM &About, IDC_ABOUT_MENU /菜单项菜单项 ENDEND / /菜单菜单HelpHelp定义结束定义结束ENDEND212.1.3 CMenu类类 CMenuCMenu类提供了许多处理菜单和菜单项的方法,它们分别

5、是类提供了许多处理菜单和菜单项的方法,它们分别是构造方法构造方法、菜单操作方法菜单操作方法、菜单项操作方法菜单项操作方法和和虚拟方法虚拟方法。构造方法是用来建立构造方法是用来建立WindowsWindows菜单并在运行时将它们附加到菜单并在运行时将它们附加到CMenuCMenu对象上,对象上,3 菜单操作方法中只有两个类菜单操作方法中只有两个类方法用来处理菜单的顶层操作方法用来处理菜单的顶层操作DeleteMenuDeleteMenu()()TrackPopupMenuTrackPopupMenu()()删除某个特定的菜单项删除某个特定的菜单项( (包括附属的级连菜单项包括附属的级连菜单项)

6、)在一个在一个POINTPOINT结构所指定的位置显示一个快捷菜单结构所指定的位置显示一个快捷菜单菜单项操菜单项操作特定的作特定的CMenuCMenu类类方法方法412.2菜单创建及其响应示例菜单创建及其响应示例12.2.1应用程序的主窗口布局应用程序的主窗口布局 主窗口标题为主窗口标题为Application of MenuApplication of Menu。在主窗口中有三个按钮,分别在主窗口中有三个按钮,分别为为VoiceVoice、ShowShow和和ExitExit单击单击FileFile菜单,出菜单,出现一个下拉菜单,现一个下拉菜单,单击单击VioceVioce选项,选项,可听到

7、可听到PCPC机喇叭发机喇叭发出蜂鸣声。单击出蜂鸣声。单击ShowShow,则显示一个则显示一个信息信息“This is a This is a Sample of adding Sample of adding menu”menu”,同样,若同样,若在窗口中单击相应在窗口中单击相应的按钮,也会有同的按钮,也会有同样的效果样的效果5应用程序的可视化编程部分应用程序的可视化编程部分1 1 对话框中按钮的设计对话框中按钮的设计对对 象象IDIDCaptionCaption命令按钮命令按钮IDC_VOICE_BUTTONIDC_VOICE_BUTTON&Voice&Voice命令按钮命令按钮IDC_

8、SHOW_BUTTONIDC_SHOW_BUTTON&Show&Show命令按钮命令按钮IDC_EXTT_BUTTONIDC_EXTT_BUTTON&Exit&Exit2 对话框中的菜单的设计对话框中的菜单的设计( (a)a)选择选择InsertInsert菜单菜单中的中的ResourceResource命命令,显示令,显示InsertInsertResourceResource对话框对话框( (b)b) 选择选择MenuMenu项项使其高亮化使其高亮化( (c)c)单击单击NewNew按钮,在资按钮,在资源文件源文件Menu.Menu.rcrc中增加了中增加了一项资源,即一个菜单一项资源,即

9、一个菜单612.2.5 给菜单连接一个类给菜单连接一个类菜单实际上是一个对象,在具体的编程中我们必须给它连接一个菜单实际上是一个对象,在具体的编程中我们必须给它连接一个类。因为这个菜单是对话框中的一个资源,它将调用对话框中一类。因为这个菜单是对话框中的一个资源,它将调用对话框中一些成员,所以把这个菜单与对话框的派生类些成员,所以把这个菜单与对话框的派生类CMenuDlgCMenuDlg相连接。相连接。7连接菜单和应用程序的主窗口连接菜单和应用程序的主窗口 菜单菜单IDR_MENU1IDR_MENU1 连接了一个类,这只是表示该菜单可以调用程序中这连接了一个类,这只是表示该菜单可以调用程序中这个

10、类的成员函数和成员变量,此时在应用程序的主窗口中仍然没有显示菜个类的成员函数和成员变量,此时在应用程序的主窗口中仍然没有显示菜单,这是因为菜单还没有和应用程序主窗口连接起来。单,这是因为菜单还没有和应用程序主窗口连接起来。下面介绍菜单与应用程序的主窗口对话框(即下面介绍菜单与应用程序的主窗口对话框(即IDD_MENU_DIALOGIDD_MENU_DIALOG)的连接。的连接。(1 1)在)在MenuMenu的工作区的的工作区的Resource ViewResource View选项卡中,双击选项卡中,双击DialogDialog文件夹中的文件夹中的IDD_MENU_DIALOGIDD_MEN

11、U_DIALOG,此时弹出此时弹出IDD_MENU_DIALOGIDD_MENU_DIALOG对话框。对话框。(2 2)在对话框的任何一个空白域,单击鼠标右键,然后在弹出的快捷菜单)在对话框的任何一个空白域,单击鼠标右键,然后在弹出的快捷菜单中选择中选择PropertiesProperties命令,在对话框中的命令,在对话框中的MenuMenu组合框中选择组合框中选择IDD_MENU1IDD_MENU18应用程序的代码编程应用程序的代码编程1. 给菜单给菜单File的的Exit选项编写代码选项编写代码voidvoid CMenuDlg CMenuDlg:OnExitMenuOnExitMenu

12、()() /TODO/TODO:在此处添加自己的命令句柄代码在此处添加自己的命令句柄代码 / /代码编写开始代码编写开始 OnOKOnOK();(); / /代码编写结束代码编写结束 92 给给File菜单的菜单的Voice项连接代码项连接代码 voidvoid CMenuDlg CMenuDlg:OnVioceMenuOnVioceMenu()() /TODO/TODO:在此处添加自己的命令句柄代码在此处添加自己的命令句柄代码 / /代码编写开始代码编写开始 MessageBeepMessageBeep(WORDWORD)-1-1);); DWORD DWORD iTime iTime= =

13、GetCurrentTimeGetCurrentTime()() while while(GeCurrentTimeGeCurrentTime()() AppWizard Step 1 - Dialog basedMFC - AppWizard Step 1 - Dialog based(2) (2) 给对话框添加菜单。给对话框添加菜单。Insert - Resource, Insert - Resource, 在在Resource Resource type -Menu - Newtype -Menu - New按钮为应用程序添加菜单资源按钮为应用程序添加菜单资源 - - 设置菜设置菜单项属

14、性,各菜单项的属性如表所示单项属性,各菜单项的属性如表所示对象对象IDIDCaptionCaption菜单菜单时间时间(&(&T)T)菜单项菜单项ID_YEAR_MENUID_YEAR_MENU年、月、日年、月、日(&(&D)D)菜单项菜单项ID_HOUR_MENUID_HOUR_MENU小时、分钟、秒小时、分钟、秒(&(&H)H)菜单项菜单项ID_EXIT_MENUID_EXIT_MENU退出退出(&(&X)X)14- -在菜单上单击鼠标右键在菜单上单击鼠标右键- -在弹出菜单中选在弹出菜单中选ClassWizardClassWizard- -出现了出现了Add ClassAdd Class

15、对话框对话框- -选择选择Select an existingSelect an existing calss calss选项,单击选项,单击OKOK按钮,按钮,- -在弹出的对话框中选择在弹出的对话框中选择CMy12_5DlgCMy12_5Dlg类,这样就把菜单加入到类,这样就把菜单加入到对话框类中。对话框类中。- -在在Resource ViewResource View选项卡中打开选项卡中打开DialogDialog资源组,双击资源组,双击IDD_MY12_5_DIALOGIDD_MY12_5_DIALOG,如下图。如下图。鼠标右键鼠标右键- -PropertiesProperties菜

16、单项,菜单项,在在MenuMenu列表框中选择编辑过的列表框中选择编辑过的菜单的菜单的IDID:ID_MENU1ID_MENU1。这样这样就把菜单加入到对话框中。就把菜单加入到对话框中。15IDID变量变量ID_YEAR_EDITID_YEAR_EDITm_Year_Editm_Year_EditID_MONTH_EDITID_MONTH_EDIT m_Month_Editm_Month_EditID_DAY_EDITID_DAY_EDITm_Day_Editm_Day_EditID_HOUR_EDITID_HOUR_EDITm_Hour_Editm_Hour_EditID_MINUTE_ED

17、ITID_MINUTE_EDIT m_Minute_Editm_Minute_EditID_SECOND_EDITID_SECOND_EDIT m_Second_Editm_Second_EditID_EXIT_BUTTONID_EXIT_BUTTON E&E&xitxit16菜单项的消息处理函数菜单项的消息处理函数菜单项菜单项IDID消息消息消息处理函数消息处理函数ID_YEAR_MENUID_YEAR_MENUCOMMANDCOMMANDOnYearMenuOnYearMenu()()ID_HOUR_MENUID_HOUR_MENUCOMMANDCOMMANDOnHourMenuOnHou

18、rMenu()()ID_EXIT_MENUID_EXIT_MENUCOMMANDCOMMANDOnExitMenuOnExitMenu()()void CMy12_5Dlg:void CMy12_5Dlg:OnYearMenuOnYearMenu() /() /给给“年、月、日年、月、日”菜单项消息处理函数菜单项消息处理函数 structstruct tm * tm *newtimenewtime; ;/定义定义tmtm结构结构, ,存贮时间存贮时间 time_t long_time;time_t long_time;/定义保存时间的变量定义保存时间的变量 char buffer10;char

19、 buffer10; time( &long_time ); time( &long_time );/获取时间获取时间 newtimenewtime = = localtime localtime( &long_time ); /( &long_time ); /时间转换时间转换 / /将年月日输出到编辑框中将年月日输出到编辑框中. . _ _itoaitoa( (newtimenewtime-tm_year+1900,buffer,10);/tm_year-tm_year+1900,buffer,10);/tm_year是当前年份和是当前年份和19001900之差之差 m_Year_Edit

20、.m_Year_Edit.SetWindowTextSetWindowText(LPCTSTR)(buffer);(LPCTSTR)(buffer); _ _itoaitoa( (newtimenewtime-tm_-tm_monmon+1,buffer,10);+1,buffer,10);/tm_/tm_monmon是当前月份是当前月份 m_Month_Edit.m_Month_Edit.SetWindowTextSetWindowText(LPCTSTR)(buffer);(LPCTSTR)(buffer); _ _itoaitoa( (newtimenewtime-tm_-tm_mday

21、mday,buffer,10);,buffer,10);/tm_/tm_mdaymday是当前日是当前日 m_Day_Edit.m_Day_Edit.SetWindowTextSetWindowText(LPCTSTR)(buffer);(LPCTSTR)(buffer); 17void CMy12_5Dlg:void CMy12_5Dlg:OnHourMenuOnHourMenu() /() /给菜单项给菜单项“小时、分、秒小时、分、秒”加入代码加入代码 structstruct tm * tm *newtimenewtime; ;/定义定义tmtm结构结构, ,保存时间保存时间 time_

22、t long_time;time_t long_time;/定义保存时间的长整型变量定义保存时间的长整型变量 char buffer10;char buffer10; time( &long_time ); time( &long_time ); /获取时间获取时间 newtimenewtime = = localtime localtime( &long_time ); ( &long_time ); /时间转换时间转换/将小时将小时, ,分钟分钟, ,秒输出到编辑框中秒输出到编辑框中. . _ _itoaitoa( (newtimenewtime-tm_hour,buffer,10);-t

23、m_hour,buffer,10);/tm_hour/tm_hour是当前小时是当前小时 m_Hour_Edit.m_Hour_Edit.SetWindowTextSetWindowText(LPCTSTR)(buffer);(LPCTSTR)(buffer); _ _itoaitoa( (newtimenewtime-tm_min+1,buffer,10);-tm_min+1,buffer,10);/tm_min/tm_min是当前分钟是当前分钟 m_Minute_Edit.m_Minute_Edit.SetWindowTextSetWindowText(LPCTSTR)(buffer);(LPCTSTR)(buffer); _ _itoaitoa( (newtimenewtime-tm_sec,buffer,10);-tm_sec,buffer,10);/tm_sec/tm_sec是当前秒是当前秒 m_Second_Edit.m_Second_Edit.SetWindowTextSetWindowText(LPCTSTR)(buffer);(LPCTSTR)(buffer); 18

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号