资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,5,章 菜单、工具栏、状态栏 中国铁道出版社,*,第,5,章 菜单、工具栏和状态栏,1,教学目标,了解菜单、工具栏和状态栏的概念及相关类的基本操作;,掌握,Windows,编程中资源的使用;,能够在单文档和对话框应用程序中编程实现常用的菜单、工具栏和状态栏。,2,5.1,菜单,菜单概述,用编辑器设计菜单,菜单类,CMenu,快捷菜单的设计与使用,示例,3,菜单,菜单是,Windows,中最常见的界面元素,是一系列命令的列表。,菜单分为两种:,下拉菜单,快捷菜单(上下文菜单),加速键是键盘上的一个键或几个键的组合,它通常对应于某一条菜单命令或工具按钮命令,它为用户提供了一种快速执行菜单命令或其他某种功能的方法。,4,使用菜单编辑器,,可以增加或删除菜单和菜单项,,定义菜单标识符,ID,,,对菜单进行合理布局,,设置菜单的初始状态(正常、灰色、加标记等),设置菜单提示等,。,使用,AppWizard,创建基于,SDI,的应用程序框架时,会自动创建一个菜单资源:,IDR_MAINFRAME,使用,AppWizard,创建基于,MDI,的应用程序框架时,会自动创建两个菜单资源:,IDR_MAINFRAME,和,IDR_*TYPE,(,星号表示项目名,),在菜单编辑器中,可以对,AppWizard,生成的菜单进行修改,也可以从空白菜单基础上创建需要的菜单,用编辑器设计菜单,5,创建下拉菜单的步骤:,创建菜单资源,打开菜单编辑器,编辑菜单:在菜单栏中双击空白方框,弹出,Menu Item Properties,对话框,设置菜单项属性。,为菜单资源选择一个类,(,视图类或对话框类,),建立菜单命令消息处理函数,WM_COMMAND:,选择菜单项或使用快捷键时将产生此消息,UPDATE_COMMAND_UI:,更新命令用户接口消息,当菜单在显示之前,会先通过此消息进行更新,从而得到更新后的菜单。,6,【,例,5.1】,单文档应用程序中菜单的创建和使用,在单文档应用程序的默认菜单资源中添加一个“绘图”菜单,通过“绘图”菜单命令在窗口中绘制出不同的椭圆和矩形,程序的运行效果如图,所示。,7,步骤:,1,、创建一个基于,SDI,的应用程序,项目名为,:EX5_1,2,、,在项目工作区的,Resource View,中,双击菜单资源,IDR_MAINFRAME,,,打开菜单资源编辑器。,3,、在,帮助,菜单前插入一个新菜单,绘图,(&D),,,并为其添加相应的菜单项,如图所示,Alt+D,激活该菜单,8,菜单属性设置,Caption ID,提示,(Prompt),椭圆,Pop-up,矩形,Pop-up,清除,(&C)ID_DRAW_CLEAR,清除窗口中的图形,100*100 ID_DRAW_ELLIPSE1,绘制一个外接矩形为,100*,100,的椭圆,100*200 ID_DRAW_ELLIPSE2,绘制一个外接矩形为,100*200,的椭圆,100*100 ID_DRAW_RECT1,绘制一个,100*,100,的矩形,100*200 ID_DRAW_RECT2,绘制一个,100*200,的矩形,9,4,、为菜单资源选择一个类,CEX5_1View,5,、使用,MFC,ClassWizard,,,为视图类,CEX5_1View,添加菜单消息处理函数,.,Object Ids,消息 消息处理函数,ID_DRAW_CLEAR COMMAND,OnDrawClear,(),ID_DRAW_ELLIPSE1 COMMAND OnDrawEllipse1(),ID_DRAW_ELLIPSE2 COMMAND OnDrawEllipse2(),ID_DRAW_RECT1 COMMAND OnDrawRect1(),ID_DRAW_RECT2 COMMAND OnDrawRect2(),10,6,、为消息处理函数添加代码,绘制一个外接矩形为,100*,100,的椭圆,void CEX5_1View:OnDrawEllipse1(),/TODO:Add your command handler code here,CDC*,pDC,=,GetDC,();/,获取窗口设备环境,CRect,r,rect,;/,定义矩形类对象,GetClientRect(&r,);/,获取客户区窗口坐标范围,rect.bottom=r.bottom/2+50;/,设置,rect,的范围,rect.top=r.bottom/2-50;,rect.right=r.right/2+50;,rect.left=r.right/2-50;,pDC,-,Ellipse(rect,);,/,在,rect,指定的范围内画椭圆,r.bottom,50,50,11,绘制一个,100*,100,的矩形,void CEX5_1View:OnDrawRect1(),/TODO:Add your command handler code here,CDC*,pDC,=,GetDC,();/,获取窗口设备,CRect,r,rect,;/,定义矩形类对象,GetClientRect(&r,);/,获取客户区窗口坐标范围,rect.bottom=r.bottom/2+50;/,设置,rect,的范围,rect.top=r.bottom/2-50;,rect.right=r.right/2+50;,rect.left=r.right/2-50;,pDC,-,Rectangle(rect,);,/,在,rect,指定的范围内画矩形,12,清除菜单项的消息处理函数:,void CEX5_1View:OnDrawClear(),/TODO:Add your command handler code here,Invalidate();,/,刷新窗口,该,函数用来使当前视图失效,强制程序重新执行,OnDraw,(),函数以刷新窗口,13,使用键盘快捷键,打开项目工作区窗口中的,Accelerator,的资源项,双击,IDR_MAINFRAME,,出现如图,5.8,的加速键资源列表,建立新的加速键,双击加速键列表的最下端的空行,弹出如图,5.9,所示的“,Accel,Properities,”,对话框,其中可设置的属性见表,5-4,。,选择添加的“椭圆,100*,100,”,菜单项的,ID,号,ID_DRAW_ELLIPSE1,,选择“,Ctrl”,输入键值“,E”,。,加速键也称为键盘快捷键,是一个按键或几个按键的组合,用于激活特定的命令。加速键也是一种资源,它的显示、编辑过程和菜单相似。,为一个菜单项定义快捷键的步骤如下:,14,技术要点:,CRect,类:是,MFC,封装矩形区域操作的一个专用类,其结构与,Windows,中的,RECT,结构类似。,类型,RECT,的定义:,typedef,struct,_RECT,LONG left;,LONG top;,LONG right;,LONG bottom;,RECT;,成员函数(略),右下角坐标,左上角坐标,15,绘制椭圆函数:,CDC,类的成员函数,BOOL Ellipse(,int,x1,int,y1,int,x2,int,y2);,BOOL Ellipse(LPCRECT,lpRect,);,绘制矩形函数:,CDC,类的成员函数,BOOL,Rectangle(int,x1,int,y1,int,x2,int,y2);,BOOL Rectangle(LPCRECT,lpRect,);,参数:,x1,,,y1,:,表示矩形左上角的坐标,x2,,,y2,:,表示矩形右下角的坐标,,lpRect,:,是一个,RECT,结构或,CRect,类对象,16,5.1.3,CMenu,类,如果想在程序中使用上下文菜单,或者在程序运行中对菜单项进行动态修改,就必须使用,MFC,的菜单类,CMenu,使用,CMenu,类可以完成大量复杂的菜单操作:创建、追踪、更新、销毁菜单,17,表,5-5,CMenu,的成员,方法,说明,Attach(),把一个标准的,Windows,菜单句柄附加到,CMenu,对象上,CreateMenu,(),创建一个空菜单并把它附加到,CMenu,对象上,CreatePopupMenu,(),创建一个弹出式菜单并把它附加到,CMenu,对象上,DeleteTempMap,(),删除由,FromHandle,(),构造函数创建的任何临时,CMenu,对象,DestroyMenu,(),去掉附加到,CMenu,对象上的菜单并释放该菜单占有的任何内存,Deatch,(),从,CMenu,对象上拆开,Windows,菜单句柄并返回该句柄,FromHandle,(),当给定,Windows,菜单句柄时,返回,CMenu,对象指针,GetSafeHmenu,(),返回由,CMenu,对象封装的菜单句柄成员,(,m_hMenu,),LoadMenu,(),从可执行文件装入菜单资源并把它附到,Cmenu,对象上,LoadMenuIndirect,(),从内存中的菜单模板中装入菜单并把它附到,CMenu,对象上,CMenu,类,成员函数,m_hMenu,:,指定附加给,CMenu,类,对象的窗口菜单的句柄,函数原型在系统目录的,AFXWIN.H,文件中,18,菜单操作方法中只有两个方法用来处理菜单的顶层操作,DeleteMenu,(),TrackPopupMenu,(),删除某个特定的菜单项,(,包括附属的级连菜单项,),在一个,POINT,结构所指定的位置显示一个快捷菜单,菜单项操作函数,方法,说明,AppendMenu,(),把一个新项加到给定的菜单的末端,CheckMenuItem,(),在弹出式菜单中,把一个校验标记放到一个菜单项,或从一个菜单项中取消一个校验标记,CheckMenuRadioItem,(),在此组中,把一个单选按钮放到菜单项旁边或从全部,其它菜单项里取消一个已存在的单选按钮,EnableMenuItem,(),去掉,(,添加,),一个菜单项,GetMenuContextHelpId,(),检索与菜单结合的帮助上下文,ID,GetMenuItemCount,(),在弹出式或顶层菜单中获得项数,GetMenuItemID,(),获取指定位置的菜单项的标识,GetMenuState,(),获得指定菜单项的状态或弹出式菜单中的菜单项数,GetMenuString,(),获得指定菜单项的标签,GetSubMenu,(),获得指向弹出式菜单的指针,InsertMenu,(),在指定位置插入新的菜单项,把其它项向下移,ModifyMenu,(),在指定位置改变已存在的菜单项,RemoveMenu,(),从指定菜单删除与弹出式菜单结合的菜单项,SetMenuContextHelpID,(),设置与菜单有关的帮助上下文,ID,SetMenuItemBitmaps,(),与菜单项有关的指定校验标记位图,19,5.1.4,上下文菜单,创建一个具体的上下文菜单,通常有两种方法,:,先创建一个菜单资源,再在程序中将编辑好的资源加载进来,利用,CMenu,类的强大功能,在程序中动态地创建上下文菜单,20,示例 为实例,5-1,添加上下文菜单,21,示例 为实例,5-1,添加上下文菜单,打开项目,EX5_1,为应用程序添加一个新菜单,在项目工作区的,Resource View,中,在,Menu,上右击鼠标,从弹出菜单中选择,Insert Menu,命令添加一个新菜单,设置标识,ID,为,IDR_CONTEXTMENU,在菜单资源编辑器中制作上下文菜单,使用与绘图菜单相同的,ID,标识,以便调用相同的消息处理函数,22,为视图类添加成员变量和消息处理函数,Object Ids,消息 消息处理函数,ID_DRAW_CLEAR COMMAND,OnDrawClear,(),ID_DRAW_ELLIPSE1 COMMAND OnDrawEllipse1(),ID_DRAW_ELLIPSE2 COMMAND OnDrawEllipse2(),ID_DRAW_RECT1 COMMAND OnDrawRect1(),ID_DRAW_RECT2 COMMAND OnDrawRect2(),CEX7_1View,WM_RBUTTONDOWN,OnRButtonDown,CEX7_1View,WM_CONTEXMENU,OnContextMenu,(),变量 类型 说明,m_bFlag,bool,标记是否使用了上下文菜单,m_ConPoint,CPoint,记录鼠标右击时相对于窗口的位置,为菜单资源连接一个类,C,5_1,然后为视图类添加成员变量,同“绘图”菜单,23,当用户在视图中右击鼠标时,系统将产生两条消息,:,WM_RBUTTONDOWN,WM_CONTEXMENU(,上下文菜单消息,):,对此消息进行处理而得到上下文菜单,afx_msg,void,OnContextMenu(CWnd,*,pWnd,CPoint,point);,afx_msg,void,OnRButtonDown(UINT,nFlags,CPoint,point);,右键,单击窗口的句柄,右键单击鼠标时的位置,相对于屏幕左上角的位置,右键单击鼠标时的位置,相对于当前窗口左上角的位置,24,添加程序代码,在视图类构造函数中对成员变量设置初始值,CEX7_1View:CEX5_1View(),/TODO:add construction code here,m_bFlag,=false;,/,上下文菜单未在使用中,由于主菜单命令和上下文菜单命令具有相同的,ID,标识,所以成员变量,m_bFlag,来,标识当前命令是来自主菜单还是上下文菜单。,m_bFlag,=true,;,表示使用上下文菜单,m_bFlag,=false;,表示未使用上下文菜单,25,鼠标右键按下消息:,void CEX5_1View:OnRButtonDown(UINT,nFlags,CPoint,point),/TODO:Add your message handler code here and/or call default,m_ConPoint,=point;,/,获取鼠标单击时相对于窗口位置的坐标,CView:OnRButtonDown(nFlags,point);,26,绘制,100*,100,的内接椭圆:,void CEX5_1View:OnDrawEllipse1(),/TODO:Add your command handler code here,CDC*,pDC,=,GetDC,();/,获取窗口设备,CRect,r,rect,;/,定义矩形类对象,if(,m_bFlag,),rect.bottom=,m_ConPoint,.y+50;/,设置,rect,的范围,rect.top=m_ConPoint.y-50;,rect.right=m_ConPoint.x+50;,rect.left=m_ConPoint.x-50;,m_bFlag,=false;,else,GetClientRect(&r,);/,获取客户区窗口坐标范围,rect.bottom=r.bottom/2+50;/,设置,rect,的范围,rect.top=r.bottom/2-50;,rect.right=r.right/2+50;,rect.left=r.right/2-50;,pDC,-,Ellipse(rect,);/,在,rect,指定的范围内画椭圆,27,WM_CONTEXTMENU,消息处理函数,void CEX5_1View:OnContextMenu(CWnd*,pWnd,CPoint,point),/TODO:Add your message handler code here,CMenu,Drawmenu,;/,创建菜单实例,Drawmenu.,LoadMenu,(IDR_CONTEXTMENU,);,/,加载菜单资源,m_bFlag,=true;,/,设置标记,使用上下文菜单,/,将,Drawmenu,菜单对象中的第一个子菜单载入为弹出菜单,CMenu,*,pContextmenu,=Drawmenu.,GetSubMenu,(0);,/,显示上下文菜单,pContextmenu,-,TrackPopupMenu,(,TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);,Drawmenu.DestroyMenu,();,/,销毁菜单,成员函数参考教材,不再赘述,.,28,在,程序中动态创建上下文菜单,void CEX5_1View:OnContextMenu(CWnd*,pWnd,CPoint,point),/TODO:Add your message handler code here,CMenu,Drawmenu,;/,创建菜单实例,m_bFlag,=true;/,设置标记,使用上下文菜单,Drawmenu.CreatePopupMenu,();/,创建空弹出菜单,/,添加菜单项,Drawmenu.AppendMenu(MF_ENABLED,ID_DRAW_ELLIPSE1,椭圆,100*,100,);,Drawmenu.AppendMenu(MF_ENABLED,ID_DRAW_ELLIPSE2,椭圆,100*200);,Drawmenu.AppendMenu(MF_SEPARATOR,);,Drawmenu.AppendMenu(MF_ENABLED,ID_DRAW_RECT1,矩形,100*,100,);,Drawmenu.AppendMenu(MF_ENABLED,ID_DRAW_RECT2,矩形,100*200);,Drawmenu.AppendMenu(MF_SEPARATOR,);,Drawmenu.AppendMenu(MF_ENABLED,ID_DRAW_CLEAR,清 除,);,/,显示弹出菜单,Drawmenu.TrackPopupMenu,(,TPM_LEFTALIGN|TPM_RIGHTBUTTON,point.x,point.y,this);,Drawmenu.DestroyMenu,();/,销毁菜单,29,运行效果图,:,30,示例 用菜单命令调用模式对话框,创建一个带有“计算”菜单的单文档应用程序,EX5-2,。“计算”菜单中包含“平均成绩”菜单项。当单击该菜单项时,会弹出一个模式对话框,用于计算平均成绩。运行结果如图,5.11,。,31,【,例,5.3】,为对话框添加菜单,(,1,)添加并定制菜单资源,(,2,)菜单与对话框关联:在对话框属性页的,Menu,下拉列表框中选择菜单,ID,(,3,)为菜单选择对话框类,之后消息映射,编写消息处理函数代码。,32,5.2,工具栏,CToolBar,5.2.1,CToolBar,类,5.2.2,工具栏编辑器,5.2.3,工具栏与菜单结合,33,5.2,工具栏,CToolBar,Visual C+,创建工具栏的一般步骤如下:,创建一个工具栏资源;,构造,CToolBar,对象;,调用,Create()(,或,CreateEx,(),函数创建,Windows,工具栏并将它与该,CToolBar,对象连接;,调用,LoadToolBar,(),函数装入工具栏资源。,工具栏可以看作是图形化的菜单,是一种更快捷、更有效、更直观的命令输入方式。,当创建,SDI/MDI,应用程序时,,AppWizard,不仅创建了缺省菜单,并且创建了缺省的工具栏,IDR_MAINFRAME,其相应的位图,Toolbar.bmp,。,用户可以为缺省工具栏中添加一些按钮,也可以设计和使用自己的工具栏。,34,CToolBar,类有几个兄弟类,CStatusBar,(,状态条),COleResizeBar,(,OLE,控制条),CDialogBar,(,对话条),都是用来接收某些,命令输入并向用户,显示状态消息的类,7.2.1,CToolBar,类,35,工具条函数简介,(,1,),Create(),函数,BOOL Create(,CWnd,*,pParentWnd,/,pParentWnd,为指向工具条所在父窗口的指针,DWORD,dwStyle,=WS_CHILD|WS_VISIBLE|CBRS_TOP,/,dwStyle,为工具条的风格,(,见下页,),UINT,nID,=AFX_IDW_TOOLBAR,/,nID,表示工具条子窗口的,ID,号,),;,下述代码生成一工具条,工具条风格为“,初始可见,”,且放置在窗口“,顶部,”,工具条窗口的,ID,号的,16,进制值为,9100,:,CToolBar,m_ToolBar,=new,CToolBar,();,m_ToolBar.Create(this,WS_VISIBLE,|,CBRS_TOP,0 x9100,);,36,(,2,),LoadToolBar,(),函数,BOOL,LoadToolBar(LPCTSTR,lpszResourceName,);/,字符串形式定义的资源,BOOL,LoadToolBar(UINT,nIDResource,);/,整型形式定义的资源,(,3,),SetBarStyle,(),函数,m_wndToolBar.SetBarStyle(,CBRS_TOOLTIPS,|,CBRS_FLYBY,|,CBRS_SIZE_DYNAMIC,);,WS_VISIBLE,使工具条窗口初始可见,CBRS_BOTTOM,初始时将工具条放到窗口底部,CBRS_FLYBY,在状态栏显示命令描述,CBRS_NOALIGN,防止控制条在其父窗口改变大小时被复位,CBRS_TOOLTIPS,鼠标光标在按钮上暂停时,显示工具提示,CBRS_TOP,初始时将工具条放在窗口顶部,CBRS_SIZE_DYNAMIC,工具条的尺寸是可变的,37,(,4,)工具条的移动,默认状况下,,CToolBar,工具条只能被应用程序所移动,为使用户能够移动工具条,为此,需向工具条及框架窗口发送消息。这可通过调用,CToolBar:EnableDocking,和,CFrame:EnableDocking,实现。,二函数原型均如下:,void,EnableDocking,(DWORD,dwStyle,);,对于,CFrame,不可用,实现工具条移动的常用代码,:,m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY,);,EnableDocking(CBRS_ALIGN_ANY,);,用户也可以对工具条进行移动或定位。或者在程序控制下,通过调用,CFrameWnd:DockControlBar,来移动,以及调用,CFrameWnd:FloatControlBar,来定位,一工具条。,停靠,风格,38,(,5,)工具条的显隐控制,由于工具条是一个窗口,它的显示或隐藏可以通过其父类,CWnd,的成员函数来实现,显示或隐藏一个工具条,void,CWnd,:,ShowControlBar,(,CControlBar,*,pBar,,,BOOL,bShow,,,BOOL,bDelay,);,在改变工具条状态前要通过函数,CWnd:GetStyle,获取当时工具条的状态,DWORD,GetStyle,()const;,为,TRUE,,,显示;为,FALSE,,,隐藏,为,TRUE,,,延迟显示工具条;为,FALSE,,,立即显示,39,5.2.2,工具栏编辑器,(1),加入工具条按钮,可以利用,VC,所提供的绘图工具,直接进行按钮的编缉,这主要用来编缉自己的按钮,对于已经存在的图标,如果要把它作为下一个按钮,可以先加入一个,ICON,资源,再通过拷贝和粘贴来放到,Toolbar,上。,(2),删除工具条按钮,删除按钮要把该按钮拖出工具条以外。,(4),插入空格,前插空格,/,后插空格,/,删除空格,(3),移动工具条按钮,是用鼠标将要移动的按钮拖动到工具条上需要的位置。,(5),工具栏按纽属性设置,40,5.2.3,工具栏与菜单结合,使它们结合的方法是在工具栏按钮的属性对话框中将按钮的,ID,号设置为相关联的菜单项,ID,。,41,5.3,状态栏,5.3.1,CStatusBar,类,5.3.2,CStatusBar,类的使用方法,5.3.3,状态栏的常用操作,5.3.4,示例,42,5.3,状态栏,CStatusBar,P222,状态栏可以随时为用户提供当前程序的状态信息,它即不接受输入也不产生命令消息。,状态栏结构:,提示信息窗格,指示器信息窗格,应用程序框架自动生成标准状态栏,状态栏的格式由,MainFrm.cpp,文件中的静态数组,indicators,所定义,,CStatusBar,类成员函数,SetIndicators,将调用该数组生成状态栏。,static UINT indicators=,ID_SEPARATOR,/,信息窗格,ID_INDICATOR_CAPS,/Caps Lock,指示器,ID_INDICATOR_NUM,/Num Lock,指示器,ID_INDICATOR_SCRL,/,Scoll,Lock,指示器,;,43,状态栏的常用操作,增加或减少窗格,如果,要对状态栏进行改变,可以对此数组元素进行修改、增加或删除。,在状态栏上显示信息,(,1,),CStatusBar,类,SetPaneText,(,nIndex,lpszNewText,),(,2,),CWnd:SetWindowText,()设置第,1,个窗格的文本,(3),手动添加状态栏窗格的,ON_UPDATE_COMMAND_UI,事件的消息映射,添加,afx_msg,void,类型的带参消息处理函数,OnUpdate,*,(,CCmdUI,*,pCmdUI,),改变状态栏的风格,SetPaneStyle(int,nIndex,UINT,nStyle,);,SetPaneInfo(int,nIndex,UINT,Id,UINT,nStyle,int,cxWidth,);,P224,表,7-11,风格类型,示例一,P224-225,使用,SetPaneText,()函数,示例二 使用,ON_UPDATE_COMMAND_UI,事件的消息,44,实例:为实例,5_1,添加状态栏信息,程序运行中会在状态栏显示系统时间,Insert,键是否被按下等状态,效果如下,:,45,步骤:,1,、打开,EX5_1,项目,2,、在资源编辑器的串表中添加以下字符串资源,ID Value Caption,ID_INDICATOR_X X,坐标值,ID_INDICATOR_Y Y,坐标值,ID_INDICATOR_TIME 00:00:00,3,、,打开,MainFrm.cpp,文件,修改数组,indicators,如下:,static UINT indicators=,ID_SEPARATOR,/status line indicator,ID_INDICATOR_X,ID_INDICATOR_Y,ID_INDICATOR_CAPS,ID_INDICATOR_NUM,ID_INDICATOR_SCRL,ID_INDICATOR_TIME,,,;,46,4.,在,CEx5_1View,类中加入,WM_MOUSEMOVE,消息处理函数,并添加代码。,void C Ex5_1View:OnMouseMove(UINT,nFlags,CPoint,point),/TODO:Add your message handler code here and/or call default,CMainFrame,*,pFrame,=(,CMainFrame,*),AfxGetApp,()-,m_pMainWnd,;,CStatusBar,*,pStatus,=&,pFrame,-,m_wndStatusBar,;,CString,str,;,if (,pStatus,),str.Format(X,=%,d,point.x,);,pStatus,-SetPaneText(1,str);,str.Format(Y,=%,d,point.y,);,pStatus,-SetPaneText(2,str);,CView:OnMouseMove(nFlags,point);,47,5.,将类,CMainFrame,中的保护型状态栏对象,m_wndStatusBar,修改为公共变量。,6.,在,Ex_SDIMenuView.cpp,文件的开始处增加下列语句:,#include “,MainFrm.h,”,7,在,CMainFrame,类的,OnCreate,函数中,设置定时器,代码如下,:,int,CMainFrame:OnCreate(LPCREATESTRUCT,lpCreateStruct,),SetTimer(1,1000,NULL);/,设置定时器,return 0;,48,8.,为,CMainFrame,类映射,WM_TIMER,消息的处理函数,并添加代码如下:,void,CMainFrame:OnTimer(UINT,nIDEvent,),/TODO:Add your message handler code here and/or call default,CTime,tmCurr,;,CString,strTime,;,tmCurr,=,CTime:GetCurrentTime,();/,获取系统当前时间,strTime,=,tmCurr.Format(%H:%M:%S,);,/,设置状态栏,ID_INDICATOR_TIME,窗格文本内容,m_wndStatusBar.SetPaneText,(,m_wndStatusBar.CommandToIndex(ID_INDICATOR_TIME,),strTime,);,CFrameWnd:OnTimer(nIDEvent,);,9.,编译并运行。,49,习题五,1.,填空题,2.,选择题,3.,简答题,4.,操作题,50,实验指导五,基本实验,拓展与提高,51,
展开阅读全文