资源描述
,单击此处编辑母版标题样式,*,面向对象程序设计与Visual C+6.0教程,*,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,第12章 MFC典型应用程序设计,12/1/2024,1,面向对象程序设计与Visual C+6.0教程,第12章,本章主要内容:,Windows应用程序的消息处理机制,应用程序分析,输入/输出处理程序(文本输出、键盘及鼠标消息处理等),菜单应用程序设计,工具栏应用程序设计,状态栏应用程序设计,对话框应用程序设计,控件应用程序设计,数据库应用程序设计,12/1/2024,2,面向对象程序设计与Visual C+6.0教程,本章主要内容:Windows应用程序的消息处理,12.1,消息处理机制,Windows程序与其他程序最大的不同之处在于使用消息机制。,Windows程序中所发生的一切都可以用消息表示,消息用于告诉操作系统所发生的事情,如按键操作或鼠标操作等。,MFC应用程序也使用基于消息的事件驱动机制,而且MFC提供的消息处理机制使得用户可以更加方便、简易的处理消息。,在Windows中,所有消息都是通过消息名进行访问的,但不同类型的消息由应用程序的不同部分进行处理。,12/1/2024,3,面向对象程序设计与Visual C+6.0教程,12.1 消息处理机制 Windows程序与其他程序,1. MFC,消息种类,消息机制是 Windows应用程序的核心,MFC中的消息可以分为:,Windows消息,控件通知消息,定时消息,命令消息,12/1/2024,4,面向对象程序设计与Visual C+6.0教程,1. MFC消息种类 消息机制是 Wi,Windows,消息, Windows消息通常指以WM开头的消息,但WM_COMMAND除外。,键盘消息和鼠标消息都属于Windows消息,Windows消息由窗口和视图进行处理。, Windows消息通常带有若干个参数传递给消息处理函数,这些参数为处理函数正确地处理消息提供了充分的信息。,12/1/2024,5,面向对象程序设计与Visual C+6.0教程,Windows消息 Windows消息通常指以WM开头的,控件通知消息是指当控件的状态发生改变时,控件向其父窗口发送的消息。,MFC对控件通知消息的传递方式与其他以WM开头的Windows消息一样,但BN_CLICKED例外,该消息的传递方式与命令消息的传递机制相同。,对于Windows消息和控件通知消息,MFC将消息传递给相应的窗口处理。,控件通知消息,12/1/2024,6,面向对象程序设计与Visual C+6.0教程,控件通知消息是指当控件的状态发生改变时,控件向其父窗口发送,定时消息,定时消息也是Windows的一类重要消息。,当需要应用程序每隔一个指定的时间间隔便执行某一特定操作时,就需要使用定时消息WM_TIMER。,在进行定时操作时,用户需要调用SetTimer函数创建一个定时器,并设置定时器的事件标志nIDEvent及时间间隔nElapse,然后编写消息WM_TIMER的消息处理函数OnTimer(),实现定时操作。,12/1/2024,7,面向对象程序设计与Visual C+6.0教程,定时消息 定时消息也是Windows的一类重要消息。9/2,命令消息,命令消息是来自于用户界面对象的WM_COMMAND消息。,包括菜单、工具栏按钮和加速键都属于命令消息等。即每当用户选择一个菜单项、单击一个按钮或需要告诉操作系统应当执行什么操作时,则发送一条WM_COMMAND命令消息。,WM_COMMAND消息的消息映射宏为OnCommand()。所有命令消息都包含有一个相同类型的参数,即该命令消息需要操作的资源ID值,由ID值映射消息处理函数。,12/1/2024,8,面向对象程序设计与Visual C+6.0教程,命令消息 命令消息是来自于用户界面对象的WM_COMM,2 MFC,消息映射机制,消息映射是指将,消息与处理函数相联系,,即当系统产生一条消息时,它能找到处理该消息的函数。,消息映射是Windows基于消息映射的,事件驱动机制,的重要内容之一。,12/1/2024,9,面向对象程序设计与Visual C+6.0教程,2 MFC消息映射机制 消息映射是指将消息与处理函数相联,Visual C+的消息映射宏,消息映射宏,功 能,DECLARE_MESSAGE_MAP,在头文件中使用,用于声明在源文件中存在消息映射,BEGIN_MESSAGE_MAP,表示消息映射的开始,用于源代码文件中,END_MESSAGE_MAP,表示消息映射的结束,用于源代码文件中,ON_COMMAND,将特定的命令消息映射到类的成员函数,即使用该成员函数处理消息,ON_COMMAND_RANGE,将一组特定的命令消息映射到类的成员函数,12/1/2024,10,面向对象程序设计与Visual C+6.0教程,Visual C+的消息映射宏 消息映射宏,Visual C+的消息映射分为两个方面:,一是在头文件.h中处理,一是在实现文件.cpp中处理,消息映射宏,12/1/2024,11,面向对象程序设计与Visual C+6.0教程,Visual C+的消息映射分为两个方面:消息映射宏9/2,消息映射举例,以上一章所创建的应用程序MyWinP为例,打开该应用程序源代码,其中有以下关于消息映射的代码(见下页)。,12/1/2024,12,面向对象程序设计与Visual C+6.0教程,消息映射举例 以上一章所创建的应用程序MyW,在头文件,MyWinp.h,中的消息映射代码,/AFX_MSG(CMyWinPApp),afx_msg void OnAppAbout();,/,NOTE-the ClassWizard will add and remove member functions here.,/DO NOT EDIT what you see in these blocks of generated code !,/AFX_MSG,DECLARE_MESSAGE_MAP(),12/1/2024,13,面向对象程序设计与Visual C+6.0教程,在头文件MyWinp.h中的消息映射代码 9/20/202,在实现文件中的消息映射代码,BEGIN_MESSAGE_MAP(CMyWinPApp,CWinApp),/AFX_MSG_MAP(CMyWinPApp),ON_COMMAND(ID_APP_ABOUT,OnAppAbout),/NOTE-the ClassWizard will add and remove mapping macros here.,/DO NOT EDIT what you see in these blocks of generated code!,/AFX_MSG_MAP,/Standard file based document commands,ON_COMMAND(ID_FILE_NEW,CWinApp:OnFileNew),ON_COMMAND(ID_FILE_OPEN,CWinApp:OnFileOpen),/Standard print setup command,ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:,OnFilePrintSetup),END_MESSAGE_MAP(),12/1/2024,14,面向对象程序设计与Visual C+6.0教程,在实现文件中的消息映射代码 9/20/202314面向对象,消息映射宏的使用,宏DECLARE_MESSAGE_MAP用于类声明文件的结束处,即在.h文件的结束处。,宏BEGIN_MESSAGE_MAP和END_MESSAGE_MAP用于类的实现文件(.cpp)中实现消息映射,而且这两个宏必须配合使用。,12/1/2024,15,面向对象程序设计与Visual C+6.0教程,消息映射宏的使用宏DECLARE_MESSAGE_MAP用,在BEGIN_MESSAGE_MAP与END_MESSAGE_MAP中间列出了消息映射的各个入口。例如,以下消息映射语句:,ON_COMMAND(ID_FILE_OPEN,CWinApp:OnFileOpen),表示当用户单击了菜单项File|Open时,则发送WM_COMMAND消息,该消息找到此语句,发现资源ID值与资源ID_FILE_OPEN匹配,则执行该语句中指定的成员函数CWinApp:OnFileOpen ()。,消息映射宏的使用(续),12/1/2024,16,面向对象程序设计与Visual C+6.0教程,在BEGIN_MESSAGE_MAP与END_MESSAG,向导AppWizard生成的单文档应用程序一般包括四个基本类:,应用程序类,主框架窗口类,文档类和,视图类,12.2 应用程序分析,12/1/2024,17,面向对象程序设计与Visual C+6.0教程,向导AppWizard生成的单文档应用程序一般包,1.AppWizard向导生成的类和文件,单击项目工作区的ClassView标签,则显示CMainFrame、CMyWinPApp、CMyWinPDoc和CMyWipView等,这是应用程序MyWinP的全部类。,利用AppWizard向导创建应用程序框架时,产生的各派生类将被创建单独的源文件。,单击某一类名(如CMyWinPView)前的“+”号,则列出该类的成员函数,双击类名或成员函数名(如GetDocument),则源代码编辑区显示出该类或该成员函数的实现代码。,12/1/2024,18,面向对象程序设计与Visual C+6.0教程,1.AppWizard向导生成的类和文件 单击项目工作区的,观察应用程序,MyWinP 的类和文件,12/1/2024,19,面向对象程序设计与Visual C+6.0教程,观察应用程序MyWinP 的类和文件9/20/202319,MyWinP程序的应用程序类名为CMyWinPApp ,由CwinApp类派生而来。,该类的每一个对象代表一个应用程序,程序中默认定义一个全局对象theApp。,CMyWinPApp类的功能是管理整个应用程序,负责程序的启动、初始化、窗口的创建以及从Windows中获取消息并将消息分发到适当的目的地。CMyWinPApp类的声明在头文件MyWinPApp.h中,类的实现在CMyWinPApp.cpp中。,(1)应用程序类,12/1/2024,20,面向对象程序设计与Visual C+6.0教程,MyWinP程序的应用程序类名为CMyWinPApp ,由,CMyWinP应用程序的主框架窗口类名为CMainFrame,它由CWnd的一个子类派生而来,该子类即CFrameWnd。,CMainFrame类的声明在头文件MainFrame.h中,类的实现在文件MainFrame.cpp中。,CMainFrame类管理主框架窗口,并拥有一些如菜单、工具栏和状态栏等控件,同时,它还扮演转发菜单和工具栏消息的角色。,(2)主框架架窗口类,12/1/2024,21,面向对象程序设计与Visual C+6.0教程,CMyWinP应用程序的主框架窗口类名为CMainFram,CMyWinP应用程序的文档类名为CMyWinPDoc,从MFC的CDocument类派生而来。其类的声明在头文件CMyWinPDoc.h中,类的实现在文件CMyWinPDoc.cpp中。,文档类的主要作用是保存应用程序的数据,并提供磁盘文件操作。,用户需要修改文档类,增加成员变量以存储应用程序的数据、增加成员函数以获得和修改数据,然后为应用程序服务。,(3)文档类,12/1/2024,22,面向对象程序设计与Visual C+6.0教程,CMyWinP应用程序的文档类名为CMyWinPDoc,, CMyWinP应用程序的视图类名为CMyWinPView,类的声明在头文件MyWinPView.h中,而类的实现在文件MyWinPView.cpp中。,视图类主要管理视图窗口,负责用户数据的输入和数据的输出显示。,在创建一个单文档应用程序时,也可以选择将视图类从非CView类的其他子类派生出来,例如,在Base Class中选择CEditView作为基本视图类,则可以很方便的得到一个简易的字处理程序。,(4)视图类,12/1/2024,23,面向对象程序设计与Visual C+6.0教程, CMyWinP应用程序的视图类名为CMyWinPVie,(5) 其他文件,除以上主要类之外,AppWizard还自动生成Stdafx.cpp和stdafx.h两个文件。,这两个文件是每个基于MFC程序所必需的, 用于建立一个预编译头文件*.pch和一个预定义的类型文件stdafx.obj。, MFC包含很多头文件,如果每次都编译则比较费时,将afxwin.h、afxext.h、afxcmn.h、afxdisp.h都放在stdafx.h文件中,这样编译系统可以识别哪些文件已经编译过,以加速应用程序的编译过程。,12/1/2024,24,面向对象程序设计与Visual C+6.0教程,(5) 其他文件 除以上主要类之外,AppWizar,2.,应用程序的运行机制,Windows应用程序的执行过程如下:,自动调用应用程序框架内的WinMain函数。WinMain()自动查找由CWinApp派生类构造函数创建的全局对象theApp。,WinMain函数调用调用Initlnstance成员函数,完成应用程序实例的初始化。,WinMain函数调用Run成员函数,进入消息循环。,WinMain函数退出,调用有关成员函数进行必要的清理工作,程序运行中止。,12/1/2024,25,面向对象程序设计与Visual C+6.0教程,2. 应用程序的运行机制 Windows应用程序的执行过,12.3,输入,/,输出处理程序,输入输出处理是几乎所有Windows应用程序最基本的功能之一, Windows应用程序通过对键盘消息和鼠标消息的响应完成对用户输入的处理,通过GDI提供的绘图函数在窗口的客户区输出信息。,12/1/2024,26,面向对象程序设计与Visual C+6.0教程,12.3 输入/输出处理程序 输入输出处理是几乎所有Win,1. 文本输出程序,文本输出指在窗口客户区特定位置输出用户指定的相关文本信息。,在MFC中,CDC类实现了对设备环境的封装,CDC类有许多成员函数,完成各种与设备环境有关的操作。,12/1/2024,27,面向对象程序设计与Visual C+6.0教程,1. 文本输出程序 文本输出指在窗口客户区,DrawText,函数,DrawText函数是CDC类用于文本输出的成员函数之一,它的作用是在指定矩形区域内以当前字体、颜色等属性及指定的显示方式显示字符串。,DrawText函数的格式如下:,形式一:,virtual int DrawText( LPCTSTR lpszString, int nCount,LPRECT lpRect, UINT nFormat );,形式二:,int DrawText(const CString&str, LPRECT lpRect,UINT nFormat );,12/1/2024,28,面向对象程序设计与Visual C+6.0教程,DrawText函数 DrawText函数是,参数含义,参数1pszString是指向输出字符串的指针;,参数nCount指定字符串的长度,如果为-1,则1pszString是一个指向以null结尾的字符串的长指针;,参数lpRect是指向RECT结构的指针;,参数nFormat用于指定输出格式;,str表示存储字符串的CString对象。,12/1/2024,29,面向对象程序设计与Visual C+6.0教程,参数含义参数1pszString是指向输出字符串的指针;9,TextOut函数,TextOut函数也是CDC类用于文本输出的成员函数,它的作用是在指定的起点坐标上,以当前字体、颜色等属性显示字符串。,TextOut函数格式 :,形式一:,virtual int TextOut(int x,int y,LPCTSTR lpszString,int nCount);,形式二:,BOOL TextOut(int x,int y,const CString,12/1/2024,30,面向对象程序设计与Visual C+6.0教程,TextOut函数 TextOut函数也是CDC类用于文本,参数含义,参数x,y表示欲显示字符串起点坐标;,参数lpszString指向要显示字符串的指针;,参数nCount指定字符串的长度;, str存储字符串的CString对象。,12/1/2024,31,面向对象程序设计与Visual C+6.0教程,参数含义 参数x,y表示欲显示字符串起点坐标;9/20/2,OnDraw函数,void OnDraw(CDC *pDC),OnDraw函数是视图类的一个重要成员函数。,成员函数OnDraw管理文档类成员变量的显示,即OnDraw函数主要用于更新视图窗口。,12/1/2024,32,面向对象程序设计与Visual C+6.0教程,OnDraw函数 OnDraw函数是视图类的一个重要成员,GetDocument,函数,GetDocument函数返回一个指向关联文档对象的指针。,通过GetDocument函数返回的文档对象指针,视图对象可以调用文档类及其派生类的成员函数或直接读取文档对象的公有数据成员,获取应用程序的数据。, GetDocument函数的格式如下:,CDocument *GetDocument() const,12/1/2024,33,面向对象程序设计与Visual C+6.0教程,GetDocument函数 GetDocument函数返回,2,键盘输入处理程序,键盘是Windows应用程序一个非常重要的输入手段,当用户按下或释放一个按键时,键盘驱动程序,KEYBOARD.DRV,中的键盘中断程序将对按键进行编码,并由用户模块USER.EXE生成键盘消息,最终发送到消息队列中等待处理,而处理键盘消息则是由应用程序的窗口来具体完成的。,在Windows系统下,键盘由所有运行的应用程序,共享,,但不管用户打开了多少个应用程序,任何情况下只有一个窗口能接受到按键消息。,Windows环境下接受到按键消息的窗口称为“有输入焦点”的窗口。,12/1/2024,34,面向对象程序设计与Visual C+6.0教程,2 键盘输入处理程序 键盘是Windows应用程序一个非,键盘消息,在Windows应用程序运行时若用户按下一个键,就会产生一个键盘消息,如:,WM_KEYDOWN,WM_KEYUP,WM_SYSKEYDOWN,WM_SYSKEYUP,其中WM_SYSKEYDOWN、WM_SYSKEYUP中的SYS表示系统按键消息,由Windows处理,应用程序只需处理WM_KEYDOWN和WM_KEYUP等非系统按键消息。,12/1/2024,35,面向对象程序设计与Visual C+6.0教程,键盘消息 在Windows应用程序运行时若用户,afx_msg void OnChar(UNIT nChar,UINT nRepCnt, UINT nFlags),WM_CHAR,的消息处理函数:, nChar表示按键的字符代码值;, nRepCnt表示按键的重复次数,因此若用户按下某键不放,该参数值将不断增加;, nFlags用于传递按键的扫描码、转换码、键的先前状态、上一次按键状态等相关信息。,12/1/2024,36,面向对象程序设计与Visual C+6.0教程,WM_CHAR的消息处理函数: nChar表示按键的字符,虚拟键代码,键盘上每一个有意义的键都对应着一个惟一的标识值,即键盘扫描码,当用户按下或释放一个按键时,都会产生扫描码。,扫描码是依赖于具体设备的。Windows应用程序中一般使用与具体设备无关的虚拟码。,虚拟码是Windows系统内部定义的与设备无关的键盘标识,从而有效避免了键盘对应用程序的影响,提高了应用程序的通用性。,12/1/2024,37,面向对象程序设计与Visual C+6.0教程,虚拟键代码 键盘上每一个有意义的键都对应着一个惟一的标识值,部分常用的虚拟键代码,虚拟键代码,对应功能键,虚拟键代码,对应功能键,VK_INSERT,Insert浆,VK_DOWN,(箭头向下),VK_LEFT,(左箭头),VK_NEXT,PageDown键,VK_RIGHT,(右箭头),VK_BACK,BackSpace键,VK_UP,(箭头向上),VK_RETURN,Enter键,VK_AZ,字母AZ,VK_TAB,Tab键,12/1/2024,38,面向对象程序设计与Visual C+6.0教程,部分常用的虚拟键代码 虚拟键代码对应功能键虚拟键代码对应功能,显示键盘输入字符程序的实现方法,利用AppWizard向导生成项目名为MyWinKey的应用程序框架。,在应用程序框架中添加保存字符的数据成员(既可以利用向导添加,也可以手工添加)。,在应用程序框架中通过ClassWizard向导添加消息处理函数 。,编译并运行应用程序即可实现将键盘输入的字符在窗口客户区显示。,这仅仅是实现步骤,详细实现方法应在Visual C+6.0环境下,具体讲授。,12/1/2024,39,面向对象程序设计与Visual C+6.0教程,显示键盘输入字符程序的实现方法利用AppWizard向导生,3.,鼠标处理程序,鼠标是一种得到广泛应用的定位输入设备。,通过鼠标的单击、双击和拖动功能,用户可以方便的操作Windows的图形界面应用程序。,Windows应用程序的鼠标消息,可以被任何窗口接受,只要鼠标移动到该窗口并有鼠标按键消息,该窗口就可以接受到鼠标消息,而与该窗口是否活动窗口或是否带有输入焦点没有关系。,12/1/2024,40,面向对象程序设计与Visual C+6.0教程,3. 鼠标处理程序 鼠标是一种得到广泛应用的定位输入设备。,鼠标消息,windows操作系统通过鼠标驱动程序接受鼠标输入消息,由鼠标设备驱动程序捕捉Windows的任何鼠标事件。,当用户移动鼠标释放鼠标按键时,将产生鼠标消息。鼠标消息可以分为客户区鼠标消息和非客户区鼠标消息。,鼠标在窗口客户区移动时产生WM_MOUSEMOVE消息.鼠标在客户区产生的消息由Windows应用程序处理,而在窗口边界、菜单、标题栏和滚动条等非客户区产生的鼠标消息一般由Windows系统处理。,12/1/2024,41,面向对象程序设计与Visual C+6.0教程,鼠标消息 windows操作系统通过鼠标驱动程序接受鼠标,鼠标消息属于Windows消息,鼠标消息均可直接利用Visual C+6.0的ClassWizard向导添加鼠标消息处理函数,与鼠标消息对应的消息处理函数如表12-3所示。,消息处理函数,12/1/2024,42,面向对象程序设计与Visual C+6.0教程,鼠标消息属于Windows消息消息处理函数 9/20/20,常用鼠标消息处理函数表,鼠标消息,消息处理函数,备注,WM_MOUSEMOVE,void OnMouseMove(UINT nFlags,CPoint point),鼠标移动,WM_LBUTTONDOWN,void OnLButtonDown(UINT nFlags,CPoint point),单击鼠标左键,WM_MBUTTONDOWN,void OnMButtonDown(UINT nFlags,CPoint point),单击鼠标中键,WM_RBUTTONDOWN,void OnRButtonDown(UINT nFlags,CPoint point),单击鼠标右键,WM_LBUTTONUP,void OnLButtonUp(UINT nFlags, CPoint point),鼠标左键释放,12/1/2024,43,面向对象程序设计与Visual C+6.0教程,常用鼠标消息处理函数表 鼠标消息 消,鼠标消息处理函数表(续),WM_MBUTTONUP,void OnMButtonUp(UINT nFlags, CPoint point),鼠标中键释放,WM_RBUTTONUP,void OnRButtonUp(UINT nFlags, CPoint point),鼠标右键释放,WM_LBUTTONDBLICK,void OnLButtonDblClk(UINT nFlags, CPoint point),双击鼠标左键,WM_MBUTTONDBLICK,void OnMButtonDblClk(UINT nFlags, CPoint point),双击鼠标中键,WM_RBUTTONDBLICK,void OnRButtonDblClk(UINT nFlags, CPoint point),双击鼠标右键,12/1/2024,44,面向对象程序设计与Visual C+6.0教程,鼠标消息处理函数表(续)WM_MBUTTONUPvoid,画笔的使用方法,先定义自己的画笔对象,取代默认的画笔,将自定义画笔选入设备环境,用指针变量保存默认的画笔;,用设备环境中的画图工具绘图,销毁自定义画笔,恢复设备环境的默认画笔,12/1/2024,45,面向对象程序设计与Visual C+6.0教程,画笔的使用方法 先定义自己的画笔对象,取代默认的画笔9/2,12.4,菜单应用程序设计,创建友好的用户界面是开发应用程序的一项重要任务。,菜单(Menu)是windows应用程序不可缺少的重要组成部分,它是应用程序命令项的列表。菜单是用户与应用程序进行交互的主要方式之一。,Visual C+可以方便的得到美观、适用、友好的用户界面。,12/1/2024,46,面向对象程序设计与Visual C+6.0教程,12.4 菜单应用程序设计 创建友好的用户界面是开发应用,1.,菜单简介,菜单主要包括下拉式和弹出式两种。,弹出式菜单是为了响应单击鼠标右键而激活的弹出的菜单,可以出现在屏幕的任何位置。,下拉式菜单由上层水平列表项以及与其相连的弹出式菜单组成,当用户选择了上层某个列表项时,与之关联的弹出式菜单就会出现,而且可以形成级联菜单。, MFC类库将菜单操作封装在CMenu类中,所有关于菜单的操作都可以通过CMenu类的成员函数实现。,12/1/2024,47,面向对象程序设计与Visual C+6.0教程,1.菜单简介 菜单主要包括下拉式和弹出式两种。9/20,菜单的基本属性,菜单的基本属性主要包括标识符(ID)、标题(Caption)和提示(Prompt)三大要素。,标识符用来在程序中唯一标识菜单项。,标题是实际显示在菜单上的文字信息,用户选择菜单时首先看到的就是标题,提示是用户在查看某个菜单时,显示在窗口底端的文字信息。,12/1/2024,48,面向对象程序设计与Visual C+6.0教程,菜单的基本属性 菜单的基本属性主要包括标识符(ID)、标题,2. 菜单资源编辑器,Visual C+为用户提供了一个便捷的菜单编辑器(Menu Editor)。,当用户使用AppWizard创建单文档(SDI)或多文档(MDI)应用程序时,系统将为应用程序自动生成默认的菜单栏。,用户打开菜单编辑器,进行适当修改,再编写各菜单项相应的消息处理函数即可。,12/1/2024,49,面向对象程序设计与Visual C+6.0教程,2. 菜单资源编辑器 Visual C+为用户提供了,在项目工作区(Workspace)窗口中选择Resource View选项卡,双击项目名,则应用程序所有的资源以树状形式显示出来,双击Menu文件夹,列出所有菜单的标识符,对于单文档应用程序则只有唯一的菜单资源IDR_MAINFRAME,双击该标识符,就打开了菜单编辑器。如下页图所示:,菜单资源编辑器,:,12/1/2024,50,面向对象程序设计与Visual C+6.0教程,在项目工作区(Workspace)窗口中选择Resourc,菜单资源编辑器界面,12/1/2024,51,面向对象程序设计与Visual C+6.0教程,菜单资源编辑器界面9/20/202351面向对象程序设计与,具有当前焦点的菜单条四周拥有一个灰色的边框,是用户正在编辑的菜单条。,如果用户想在当前菜单条前添加一个新的菜单条,按下Insert键,在该菜单条前将会出现一个新的空白菜单条,然后为其设置属性。,删除菜单时,用户应将当前焦点移至该菜单处,使用Delete键进行删除操作。,如果此菜单条是菜单选项,则系统将直接将其删除;而当此菜单条是一个下拉菜单时,系统会提示用户是否删除整个下拉菜单,若回答“是”,则系统将该菜单条所包含的所有菜单项全部删除。,菜单资源编辑器的使用,12/1/2024,52,面向对象程序设计与Visual C+6.0教程,具有当前焦点的菜单条四周拥有一个灰色的边框,是用户正在编辑,若菜单项的首字母都带有下划线,表示该字母是一个快捷键,用户可以通过快捷键打开该菜单项。,加速键是指用户通过按一组组合键的方式直接执行该菜单命令,而不用先打开该菜单项。,快捷键作用是打开菜单但并没有执行菜单命令,加速键的作用是执行菜单命令(如Ctrl+C直接执行复制功能)但却没有打开菜单项 。,加速键与快捷键,12/1/2024,53,面向对象程序设计与Visual C+6.0教程,若菜单项的首字母都带有下划线,表示该字母是一个快捷键,用户,形式一:,BOOL Rectangle(LPCRECT lpRect);,形式二:,BOOL Rectangle(int x1,inty1,int x2,int y2);,参数lpRect是指向RECT结构或Crect对象的指针,参数x1,y1用于指定矩形区域左上角坐标,参数x2,y2用于指定矩形区域右下角坐标。,Rectangle绘图函数,12/1/2024,54,面向对象程序设计与Visual C+6.0教程,形式一:Rectangle绘图函数 9/20/202354,形式一:,BOOL Ellipse(LPCRECT lpRect);,形式二:,BOOL Ellipse(int x1,inty1,int x2,int y2);,参数x1,y1用于指定矩形区域左上角坐标,参数x2,y2用于指定矩形区域右下角坐标。,Ellipse,绘图函数,12/1/2024,55,面向对象程序设计与Visual C+6.0教程,形式一:Ellipse 绘图函数9/20/202355面向,12.5,工具栏应用程序设计,工具栏也是Windows应用程序中常见的用户界面。,Windows应用程序中,为方便用户使用,通常将常用的菜单项提取出来,例如常用的文件菜单项(New、Open等)、编辑菜单项(Copy、Cut、Paste等)组成工具栏。,如果说菜单是Windows程序常用的界面元素,那么在很多情况下,工具栏可以更快捷、更方便、更有效、更直观的进行某些操作。,12/1/2024,56,面向对象程序设计与Visual C+6.0教程,12.5 工具栏应用程序设计 工具栏也是Windows应,1.,工具栏简介,工具栏是应用程序中一组提供快捷操作的工具,通常将常用的命令放在工具栏中。,工具栏由多个工具栏按钮组成,其中每一个按钮代表一个功能选项,这样对于常用的命令可以直接进行操作,而不用每次都打开菜单栏进行选择,从而可以方便用户操作。,12/1/2024,57,面向对象程序设计与Visual C+6.0教程,1. 工具栏简介 工具栏是应用程序中一组提供快捷操作的工具,工具栏按钮形式,工具栏按钮有命令按钮和复选框按钮等形式。如Word中的打开文件、保存文件、打印等都是命令按钮形式。,对于复选按钮,第一次单击后,保持选中状态,同时可以选择其他按钮来配合产生一定的效果,Word中使用的加黑(,B,)、下划线(,U,)和斜体(,I,)就是标准的复选按钮,当再次单击时,则按钮恢复初始状态。,12/1/2024,58,面向对象程序设计与Visual C+6.0教程,工具栏按钮形式 工具栏按钮有命令按钮和复选框按钮等形式。如,2.,使用资源编辑器创建工具栏,CToolBar类封装了工具栏的功能。,AppWizard向导在创建的应用程序的主框架窗口类CMainFrame中添加一个CToolBar类的数据成员m_wndToolBar,并在主框架窗口类CMainFrame的成员函数OnCreate中创建工具栏。,12/1/2024,59,面向对象程序设计与Visual C+6.0教程,2.使用资源编辑器创建工具栏 CToolBar类封装了, AppWizard向导为所创建的应用程序加入了系统预定义的工具栏。,应用中应根据应用程序的具体要求,通过工具栏编辑器,修改预定义的工具栏或生成新的工具栏。,系统预定义工具栏具有停靠功能,主框架窗口能够接受工具栏的停靠。,通常情况下,工具栏中的按钮对应于菜单中的选项,所以,在定义工具栏的按钮时,也会定义相应的菜单项。,使用资源编辑器创建工具栏(续),12/1/2024,60,面向对象程序设计与Visual C+6.0教程, AppWizard向导为所创建的应用程序加入了系统预定义,创建新工具栏时,可以选择菜单项Insert|Resource,弹出如下页图所示的,添加工具栏(Insert Resource)对话框。,在该对话框中双击Toolbar资源类型(或选择Toolbar并单击New按钮)即可进入工具栏资源编辑器创建新的工具栏资源。,创建新工具栏,12/1/2024,61,面向对象程序设计与Visual C+6.0教程,创建新工具栏时,可以选择菜单项Insert|Resour,Insert Resource,对话框界面,12/1/2024,62,面向对象程序设计与Visual C+6.0教程,Insert Resource对话框界面 9/20/2023,编辑已有的工具栏资源,可以选择项目工作区的Resource View选项卡,单击Toolbar,双击所需要编辑的工具栏资源(如IDR_MAINFRAME)即可,如下页图所示,工具栏资源编辑器,12/1/2024,63,面向对象程序设计与Visual C+6.0教程,编辑已有的工具栏资源,可以选择项目工作区的Resource,工具栏资源编辑器界面,12/1/2024,64,面向对象程序设计与Visual C+6.0教程,工具栏资源编辑器界面 9/20/202364面向对象程序设,工具栏资源编辑器中有两个视图窗口:, 一个是预览窗口,其中显示正常大小的工具栏,包含用户已经添加的工具栏按钮,用户可以从这个窗口中预览当前工具栏的外观,并且可以在其中选择当前编辑的工具栏按钮,,当前编辑的工具栏按钮处于明显凹状态,。,另一个视图窗口是编辑窗口,显示当前工具栏按钮的放大位图,用户可以利用资源编辑器中的Graphics图形工具栏来创建或,编辑工具栏按钮的位图,资源。,工具栏资源编辑器的应用,12/1/2024,65,面向对象程序设计与Visual C+6.0教程,工具栏资源编辑器中有两个视图窗口:工具栏资源编辑器的应用9/,当创建完一个工具栏按钮后,已有的按钮之后将会出现一个新的空白按钮,用户可以按照顺序依次创建工具栏按钮。,也可以改变工具栏上按钮的排列顺序:在预览窗口中选中第一个按钮,然后用鼠标将其拖放至另一个按钮处,即可交换这两个按钮的顺序。,更新按钮的位图:则需先选中此按钮,按下Delete键即可刷新其位图资源。,删除按钮:用户只须在预览窗口中选中该按钮,按下鼠标左键不放,将此按钮拖出预览窗口区域即可。,工具栏资源编辑器的应用(续),12/1/2024,66,面向对象程序设计与Visual C+6.0教程,当创建完一个工具栏按钮后,已有的按钮之后将会出现一个新的空,12.6,状态栏应用程序设计,状态栏的作用是在程序的控制下,显示当前程序的执行状态或简要的说明信息,例如,当选取某工具或菜单项时,在状态栏中显示说明文字。,状态栏既不接受用户输入也不产生命令消息。,状态栏可支持两种类型的文本窗口,分别是信息行窗口和状态指示器窗口。,12/1/2024,67,面向对象程序设计与Visual C+6.0教程,12.6 状态栏应用程序设计 状态栏的作用是在程序的控制,状态栏的实现,一般情况下,状态栏位于Windows应用程序窗口的底部,通常由一系列的面板(Pane)组成。,状态栏用于文本输出或指示器,其中常见的指示符有Caps Lock、Num Lock、Scroll Lock等。,如果在AppWizard向导的Step4对话框中选择了Initialstatusbar项,那么AppWizard向导生成的应用程序就拥有一个默认的状态栏。,12/1/2024,68,面向对象程序设计与Visual C+6.0教程,状态栏的实现 一般情况下,状态栏位于Windows应用,创建状态栏的目的是提供一个输出区域,定义提示信息,建立特定状态和提示信息的联系。,CStatusBar类封装了状态栏的功能。,通过AppWizard向导创建应用程序时:,向导在应用程序的主框架窗口类CMainFrame中定义了一个CStatusBar类的数据成员m wndStatusBar。,在主框架程序MainFram.cpp中定义状态栏指示器标识符数组IndicatorIDs。,在主框架窗口类的成员函数OnCreate中创建状态栏。,状态栏的实现(续),12/1/2024,69,面向对象程序设计与Visual C+6.0教程,创建状态栏的目的是提供一个输出区域,定义提示,12.7,对话框应用程序,对话框是程序与用户之间的交互的工具。例如打开文件、查询以及进行其他数据交换时都需要使用对话框,从最简单的询问“是”与“否”的消息框,到复杂的数据处理框,都可以用对话框来完成。,对话框是一个窗口,它继承于MFC的CWnd类,它具备了窗口的很多属性,不仅可以接受消息、可以被移动和关闭,而且还可以在它的客户区中进行绘图操作。,在设计对话框时可以把控件直接粘到对话框,以实现各种操作。,12/1/2024,70,面向对象程序设计与Visual C+6.0教程,12.7 对话框应用程序 对话框是程序与用户之间的交互的,1.,对话框的分类,对话框按其动作模式分为:,模式对话框,无模式对话框,12/1/2024,71,面向对象程序设计与Visual C+6.0教程,1. 对话框的分类 对话框按其动作模式分为:9/20/202,模式对话框, MFC的对话框类(CDialog)既支持模式对话框也支持无模式对话框。,对于模式对话框,如Open File对话框,在同一个应用程序中,只有该对话框被关闭后,才能对程序的其他功能进行操作。,模式对话框被打开之后,对话框就接管了父窗口的输入控制权,并掌握了控制权。只有当用户关闭了该对话框之后,对话框才会把控制权交给父窗口。,12/1/2024,72,面向对象程序设计与Visual C+6.0教程,模式对话框 MFC的对话框类(CDialog)既支持模式,无模式对话框,无模式对话框:,对话框与父窗口共享控制权,用户可以在主窗口和对话框之间来回切换,在对话框仍保留在屏幕上的同时,用户还可以在应用程序的其他窗口中进行操作,12/1/2024,73,面向对象程序设计与Visual C+6.0教程,无模式对话框 无模式对话框:9/20/202,2.,常用对话框类,所有对话框类的基类是CDialog,常用对话框类包括:,文件存取对话框类,颜色设定对话框类,字型设定对话框类,打印设定对话框类,字符串搜索与替换对话框类,12/1/2024,74,面向对象程序设计与Visual C+6.0教程,2. 常用对话框类 所有对话框类的基类是CDialog9/2,3.,对话框的常用函数,函 数,功 能,Cdialog:Create,创建无模式对话框,CWnd:UpdateData,设定对话框控制项的数据或取得控制项数据,CWnd:GetDlgltem,获得子窗口或对话框内部控制项对象的指针,CWnd:GetDlgltemText,获得控制项的标题或字符串内容,CWnd:GetDlgltemInt,获得控制项的文本内容,并转换为整数,CWnd:SetDlgltemText,设定控件显示的文本内容,CWnd:SetDlgltemInt,将整数转换为文本并赋予控件,CWnd:DlgDirSelect,获得列表框当前选定项的字符串内容,12/1/2024,75,面向对象程序设计与Visual C+6.0教程,3.对话框的常用函数 函 数 功,CWnd:DlgDirList,将指定路径下符合文件属性和描述的所有文件加到列表框中,CWnd:CheckDlgButton,设置/取消按钮的标记符或更改一个三态按钮的状态,CWnd:CheckRadioButton,标记指定的圆形按钮,同时删除同组的其他圆形按钮的标记符,CWnd:GetCheckRadioButton,获得指定组群中标记了的圆形按钮代码,CscrollBar:SetScrollRange,设定滚动条的范围(最大最小位置值),CscrollBar:SetScrollPos,设定滚动条的位置,CscrollBar:GetScrollRange,获得滚动条的滚动范围,CscrollBar:GetScrollPos,获得滚动条的当前位置,对话框的常用函数(续),12/1/2024,76,面向对象程序设计与Visual C+6.0教程,CWnd:DlgDirList将指定路径下符合文件属性和描,对话框的创建一般可以按以下步骤进行:,对话框界面设计,生成管理对话框的新类,定义数据成员,定义消息及消息处理函数,对话框的显示等相关工作,创建对话框的一般步骤,12/1/2024,77,面向对象程序设计与Visual C+6.0教程,对话框的创建一般可以按以下步骤进行:创建对话框的一般步骤 9,12.8,控件应用程序设计, Windows应用程序中控件的应用随处可见,任意打开一个窗口或对话框,一般都具有各种各样的控件,如命令按钮、静态文本、编辑框、列表框等。,控件是一种子窗口,应用程序用它来与其他窗口一起完成简单的输入输出操作。,在Windows应用程序中,窗口和对话框是框架或容器,控件是灵魂。,12/1/2024,78,面向对象程序设计与Visual C+6.0教程,12.8 控件应用程序设计 Windows应用程序中控,1.,控件简介,控件是一种特殊的对象,是Windows应用程序和用户进行交互的重要手段。,控件的使用很好的体现了Windows系统面向对象的特点。,控件通常可以出现在对话框或工具栏中,也可以出现在窗口中。, Visual C+6.0提供了各种控件来实现直观、方便、快捷的交互。,12/1/2024,79,面向对象程序设计与Visual C+6.0教程,1. 控件简介 控件是一种特殊的对象,是Windows,在Visual C+中,控件可以分为:,Windows常用控件,Active X控件,其他MFC类库所支持的控件,控件的分类,12/1/2024,80,面向对象程序设计与Visual C+6.0教程,在Visual C+中,控件可以分为:控件的分类9/20/,Windows,常用控件,Windows常用控件包括使用频率最高的标准控件和用户自定义控件,如:,静态文本控件,命令按钮控件,编辑框控件,列表框控件,复选框控件,组合框控件,滚动条控件,12/1/2024,81,面向对象程序设计与Visual C+6.0教程,Windows常用控件 Windows常用控,Active X,控件,Active X控件又称为OLE控件,,常用于Windows应用程序的对话框中,或用于WWW的网页中。,12/1/2024,82,面向对象程序设计与Visual C+6.0教程,Active X控件 Active X控件又,其他,MFC,类库所支持的控件,除Windows常用控件和Active X控件之外,MFC类库还支持:, CBitmapButton控件, CCheckListBox控件, CDragListBox控件, CProgressCtr控件, CStatusBar控件等,12/1/2024,83,面向对象程序设计与Visual C+6.0教程,其他MFC类库所支持的控件 除Windows常用控件和Act,2.,常用控件类,控件,MFC类,简要说明,静态文本控件,CStatic,用于为其他控件显示文本标签,图形控件,CStatic,用于显示图标,编辑框控件,CEdit,用于文本输入的控件,组框控件,CComboBox,将列表框和编辑框控件有机组合,按钮控件,CButton,用于执行命令,单选按钮,CButton,用于对互相排斥的选项进行选择,复选框,C
展开阅读全文