资源预览内容
第1页 / 共82页
第2页 / 共82页
第3页 / 共82页
第4页 / 共82页
第5页 / 共82页
第6页 / 共82页
第7页 / 共82页
第8页 / 共82页
第9页 / 共82页
第10页 / 共82页
亲,该文档总共82页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第八章第八章MFCMFC的基础知识的基础知识2024/7/20内容提要内容提要vMFCMFC概述概述vMFCMFC类的组织结构及主要的类类的组织结构及主要的类vMFCMFC中全局函数与全局变量中全局函数与全局变量v应用程序向导及其应用应用程序向导及其应用8.1.8.1.MFCMFC概述概述2024/7/201.VC+1.VC+编程的实现方法编程的实现方法v利用利用Windows APIWindows API函数编程,用户需要编写函数编程,用户需要编写大量的代码,工作量大。大量的代码,工作量大。v利用利用MFCMFC和向导和向导( (WizardWizard) )实现可视化编程实现可视化编程, ,其步骤如下:其步骤如下:用用Class WizardClass Wizard生成应用程序的基本框架;生成应用程序的基本框架;用用Class WizardClass Wizard建立类、消息处理、数据处理建立类、消息处理、数据处理函数或定义控件的属性、事件和方法:函数或定义控件的属性、事件和方法:把各应用程序所要求的功能添加到类中。把各应用程序所要求的功能添加到类中。2024/7/202.MFC2.MFC及其特点及其特点vMFCMFC是用来编写是用来编写WindowsWindows应用程序应用程序的的C+C+类集类集以层次结构组织以层次结构组织封装了大部分封装了大部分APIAPI函数函数提供了提供了图形环境图形环境下应用程序的框架下应用程序的框架提供了创建应用程序的组件提供了创建应用程序的组件v提供大量的基类提供大量的基类便于便于不同的应用环境进行扩充不同的应用环境进行扩充v允许自定义和扩展应用程序中的类允许自定义和扩展应用程序中的类v较好的移植性,较好的移植性,可移植于众多的平台可移植于众多的平台v很好地保持了程序的向下兼容性很好地保持了程序的向下兼容性AFXv1989年微软公司成立年微软公司成立ApplicationFramework技术技术团队,名为团队,名为AFX小组,用以开发小组,用以开发C+对象导向工具给对象导向工具给Windows应用程序开发人应用程序开发人员使用。员使用。vutilizethelatestinobjectorientedtechnologytoprovidetoolsandlibrariesfordeveloperswritingthemostadvancedGUIapplicationsonthemarketvdeliverthepowerofobject-orientedsolutionstoprogrammerstoenablethemtobuildworld-classWindowsbasedapplicationsinC+.v94年微软放弃年微软放弃AFX。把。把AFX中已经完工的部分做了一中已经完工的部分做了一点改进形成了点改进形成了MFC,至,至今今MFC还有还有LINUX版本版本2024/7/202024/7/203.版本升级与功能的增强版本升级与功能的增强MFC1.0 & MS C/C+7.0MFC1.0 & MS C/C+7.0应用程序中非图形部分的类应用程序中非图形部分的类GUIGUI功能的功能的WindowsWindows相关类相关类MFC2.0 & MS VC+1.0MFC2.0 & MS VC+1.0在在1.01.0基础上增添了一些应用程序构造类基础上增添了一些应用程序构造类MFC3.0 & VC+2.0MFC3.0 & VC+2.0增添了对开发增添了对开发3232位应用程序的支持位应用程序的支持MFC2.0 & MS VC+1.5MFC2.0 & MS VC+1.5添加了添加了ODBCODBC类,并且还支持类,并且还支持OLEOLE的性能的性能MFC4.0MFC4.0包含了在包含了在Win95Win95和和NTNT中大多数新的公共控件中大多数新的公共控件和和DAODAO、MAPIMAPI增强了对数据库应用程序的支持增强了对数据库应用程序的支持利用利用DAODAO类通过编程语言来访问、操纵和管理数据库类通过编程语言来访问、操纵和管理数据库对对InternetInternet也提供了强有力的支持也提供了强有力的支持MFC4.21MFC4.21Graphical User InterfaceOpen Database ConnectivityObject Linking and EmbeddingData Access ObjectMessaging Application Programming Interface2024/7/20MFC5.0增强了对增强了对数据库数据库和和Internet的支持,可使用的支持,可使用ODBC类和类和ODBC驱动程序来访问提供驱动程序来访问提供ODBC支持的数支持的数据库中的数据;可以通过数据访问对象(据库中的数据;可以通过数据访问对象(DAO)类通)类通过编程语言来访问和操纵数据库中的数据并管理数据库过编程语言来访问和操纵数据库中的数据并管理数据库、数据库对象与结构。对、数据库对象与结构。对Internet支持主要包括以下几支持主要包括以下几个部分:个部分:vWin32InternetAPI使使Internet成为应用程序的一部成为应用程序的一部分并简化了对分并简化了对Internet服务的访问服务的访问vActivex文档可以显示在整个文档可以显示在整个Web浏览器或浏览器或OLE容器容器的整个客户窗口中的整个客户窗口中vActivex控件可以用在控件可以用在Internet和桌面应用程序中和桌面应用程序中v可以使用可以使用CHttpServer、CHttpFilter、ChttpServerContext和和CHttpFilterContext类来建立类来建立动态动态DLL,以便为,以便为Web页面增添功能页面增添功能2024/7/20MFC6.0MFC6.0中引进了新的功能:中引进了新的功能:v提出了活动文档容器来管理不同类型的文档,并通提出了活动文档容器来管理不同类型的文档,并通过引入类过引入类COleDocObjectItemCOleDocObjectItem来加以实现。同时在来加以实现。同时在应用程序向导中也加入了对这一新特性的支持。应用程序向导中也加入了对这一新特性的支持。v加入了对动态加入了对动态HTMLHTML技术的支持,通过引入一个新类技术的支持,通过引入一个新类CHtmlViewCHtmlView,使程序员开发的应用程序可以浏览并,使程序员开发的应用程序可以浏览并显示用动态显示用动态HTMLHTML技术开发的技术开发的HTMLHTML文档。类文档。类CHtmlViewCHtmlView中封装了许多浏览器的特征,包括浏览中封装了许多浏览器的特征,包括浏览器在历史记录、书签和安全等方面的特征都被封装器在历史记录、书签和安全等方面的特征都被封装进了类进了类CHtmlViewCHtmlView。v扩展了对公共控件的支持,如时间控键、扩展了对公共控件的支持,如时间控键、IPIP地址控地址控键和日期控键等。键和日期控键等。2024/7/202024/7/202024/7/202024/7/208.2.8.2. MFCMFC类的组织结构及类的组织结构及主要的类主要的类2024/7/201. MFC类的组织结构类的组织结构v从根类从根类Cobject派生出许许多多子类,以层派生出许许多多子类,以层次结构组织起来,主要有以下若干类:次结构组织起来,主要有以下若干类:应用程序体系结构类;应用程序体系结构类;应用程序体系结构类;应用程序体系结构类;窗口、对话框和控件类;窗口、对话框和控件类;窗口、对话框和控件类;窗口、对话框和控件类;绘图和打印类;绘图和打印类;绘图和打印类;绘图和打印类;简单数据类型类;简单数据类型类;简单数据类型类;简单数据类型类;数组、列表和映射类;数组、列表和映射类;数组、列表和映射类;数组、列表和映射类;文件和数据库类;文件和数据库类;文件和数据库类;文件和数据库类;InternetInternetInternetInternet和网络工作类;和网络工作类;和网络工作类;和网络工作类;OLEOLEOLEOLE类;类;类;类;调试和异常类调试和异常类调试和异常类调试和异常类2024/7/201. MFC类的组织结构(续)类的组织结构(续)v应用程序体系结构类;应用程序体系结构类; 应用程序和线程支持类应用程序和线程支持类应用程序和线程支持类应用程序和线程支持类 命令相关类命令相关类命令相关类命令相关类 文档类文档类文档类文档类 文档模板类文档模板类文档模板类文档模板类 视类视类视类视类( ( ( (体系结构体系结构体系结构体系结构) ) ) ) 框架窗口框架窗口框架窗口框架窗口( ( ( (体系结构体系结构体系结构体系结构) ) ) )v窗口、对话框和控件类窗口、对话框和控件类 框架窗口类(窗口)框架窗口类(窗口)框架窗口类(窗口)框架窗口类(窗口) 视类(窗口)视类(窗口)视类(窗口)视类(窗口) 对话框类对话框类对话框类对话框类 控件条类控件条类控件条类控件条类2024/7/201. MFC类的组织结构(续)类的组织结构(续)v绘图和打印类绘图和打印类 输出输出输出输出( ( ( (设备相关设备相关设备相关设备相关) ) ) )类类类类 绘图工具类绘图工具类绘图工具类绘图工具类v数组、列表和映射类数组、列表和映射类 数组类数组类数组类数组类 列表类列表类列表类列表类 映射类映射类映射类映射类v文件和数据库类文件和数据库类 文件文件文件文件I/OI/OI/OI/O类类类类 DAODAODAODAO类类类类 ODBCODBCODBCODBC类类类类2024/7/201. MFC类的组织结构(续)类的组织结构(续)vInternetInternet和网络工作类和网络工作类 LSAPILSAPILSAPILSAPI类类类类 Windows SocketWindows SocketWindows SocketWindows Socket类类类类 Win32 InternetWin32 InternetWin32 InternetWin32 Internet类类类类v调试和异常类调试和异常类 调试支持类调试支持类调试支持类调试支持类 异常类异常类异常类异常类2024/7/201. MFC类的组织结构(续)类的组织结构(续)vOLEOLE(Object Linking and Embedding Object Linking and Embedding )类)类 OLEOLEOLEOLE容器类容器类容器类容器类 OLEOLEOLEOLE服务器类服务器类服务器类服务器类 OLEOLEOLEOLE拖放和数据传输类拖放和数据传输类拖放和数据传输类拖放和数据传输类 OLEOLEOLEOLE普通对话框类普通对话框类普通对话框类普通对话框类 OLEOLEOLEOLE动画类动画类动画类动画类 OLEOLEOLEOLE动画类动画类动画类动画类 OLEOLEOLEOLE控件类控件类控件类控件类 活动文档类活动文档类活动文档类活动文档类 其他文档类其他文档类其他文档类其他文档类2024/7/202. 根类根类v根类根类CObjectCObject是是MFCMFC抽象基类抽象基类。提供了。提供了许多编程所需的公共操作:许多编程所需的公共操作:对象的建立;对象的建立;对象的建立;对象的建立;对象的删除;对象的删除;对象的删除;对象的删除;串行化支持串行化支持串行化支持串行化支持, , , ,有两重要成员函数:有两重要成员函数:有两重要成员函数:有两重要成员函数: SerializeSerializeSerializeSerialize和和和和IsSerializeIsSerializeIsSerializeIsSerialize;运行时信息运行时信息运行时信息运行时信息, , , ,有两重要成员函数:有两重要成员函数:有两重要成员函数:有两重要成员函数: IsKindofIsKindofIsKindofIsKindof和和和和 GetRuntimeClassGetRuntimeClassGetRuntimeClassGetRuntimeClass;对象诊断输出。对象诊断输出。对象诊断输出。对象诊断输出。2024/7/203.应用程序体系结构类应用程序体系结构类v用于构造应用程序框架,提供多数应用用于构造应用程序框架,提供多数应用程序公用的功能程序公用的功能v编写程序的任务是填充框架,添加应用编写程序的任务是填充框架,添加应用程序专用的功能;程序专用的功能;v其中较重要类:其中较重要类:命令相关类;命令相关类;窗口应用程序类;窗口应用程序类;文档文档/ /视类;视类;线程基类;线程基类;.2024/7/20CObjectCObject的子类的子类; ;MFCMFC库中所有具有消息映射属性的基类。库中所有具有消息映射属性的基类。消息映射消息映射规定了当一对象接收到消息命令时,应规定了当一对象接收到消息命令时,应调用哪一个函数对该消息进行处理。调用哪一个函数对该消息进行处理。(2)(2)窗口应用程序类:窗口应用程序类:CWinAppCWinApp类类每个应用程序有且仅有一个从每个应用程序有且仅有一个从CWinAppCWinApp类中派生的类中派生的对象。在运行程序中该对象与其它对象相互协调;对象。在运行程序中该对象与其它对象相互协调;CWinAppCWinApp类封装了类封装了初始化、运行、终止初始化、运行、终止应用程序的应用程序的代码。代码。(1)(1)命令相关类:命令相关类:CCmdTargetCCmdTarget类类在在CWinApp中定义的部分函数的功能有时也中定义的部分函数的功能有时也可以通过可以通过MFC提供的全局函数来实现,这些全提供的全局函数来实现,这些全局函数一般都以局函数一般都以Afx为前缀。为前缀。例如调用例如调用AfxMessageBox函数将弹出一个消函数将弹出一个消息框,其功能与息框,其功能与CWinApp中的中的DoMessageBox相同。相同。AfxMessageBox原型原型如下:如下:intAfxMessageBox(LPCTSTRlpszText,UINTnType=MB_OK,UINTnIDHelp=0)2024/7/20(3)(3)文档文档/ /视类视类文档对象文档对象由文档模板对象创建,管理应用程由文档模板对象创建,管理应用程序的数据序的数据;CDocument;CDocument支持标准的文档操作支持标准的文档操作视对象视对象表示一个窗口的客户区,显示文档数表示一个窗口的客户区,显示文档数据并允许用户与之交互。据并允许用户与之交互。(4)(4)线程基类:线程基类:CWinThreadCWinThread类类所有线程的基类,可直接使用。所有线程的基类,可直接使用。CWinAppCWinApp类就是从类就是从CWinThreadCWinThread类中派生出来的。类中派生出来的。2024/7/204.可视对象类可视对象类窗口类窗口类CWndCWnd类类视类视类CViewCView类类菜单类菜单类CMenuCMenu类类对话框类对话框类CDialogCDialog类类控件类控件类控件条类控件条类CControlBarCControlBar类类Frame Windows and Views2024/7/202024/7/2027(1)(1)窗口类窗口类CWndCWnd类类CwndCwnd是是CCmdTargetCCmdTarget类的子类,提供了所有窗口类的类的子类,提供了所有窗口类的基本功能;基本功能;创建创建WindowsWindows窗口的两个步骤:窗口的两个步骤:引入构造函数,构造一个引入构造函数,构造一个CWndCWnd对象对象调用调用CreateCreate建立建立WindowsWindows窗口,并连到窗口,并连到CWndCWnd对象对象(2)(2)视类视类CViewCView类类表示框架窗口的用户区和显示文档数据并接收输入的表示框架窗口的用户区和显示文档数据并接收输入的用户区;用户区;其主要派生类:其主要派生类:CScrollViewCScrollView:具有滚动功能的视的基类具有滚动功能的视的基类CFormViewCFormView:其布局在对话资源中定义的滚动视其布局在对话资源中定义的滚动视CEditViewCEditView:具有文本编辑、查找、替换和滚动功能的视具有文本编辑、查找、替换和滚动功能的视2024/7/20(3)菜单类菜单类CMenu类类CObjectCObject类的子类,用于管理菜单。类的子类,用于管理菜单。一个一个Windows Windows HMenuHMenu的封装,提供了菜单资源建立、的封装,提供了菜单资源建立、修改、跟踪及删除的成员函数。修改、跟踪及删除的成员函数。(4)对话框类对话框类CDialog类类从从CWndCWnd类中派生出来的特殊的窗口类。类中派生出来的特殊的窗口类。包括通用对话框类包括通用对话框类CDialogCDialog以及支持文件选择、颜以及支持文件选择、颜色选择、字体选择、打印、替换文本的公共标准对色选择、字体选择、打印、替换文本的公共标准对话框子类。话框子类。2024/7/20(5)控件类控件类包括若干主要类:包括若干主要类:按钮按钮静态文本静态文本滚动条滚动条编辑框编辑框.为为WindowsWindows应用程序提供了各种输入和显示应用程序提供了各种输入和显示界面。界面。用于建立静态文本、命令按钮、位图按钮、用于建立静态文本、命令按钮、位图按钮、列表框、组合框、滚动条、编辑框等。列表框、组合框、滚动条、编辑框等。2024/7/20(6)控件条类控件条类CControlBar类类连接在主窗口框架的顶部或底部的小窗口;连接在主窗口框架的顶部或底部的小窗口;为工具条、状态条、对话条和分割窗口建立模为工具条、状态条、对话条和分割窗口建立模型;型;包括如下的基类:包括如下的基类:CToolBarCToolBar工具条;工具条;CStatusBarCStatusBar状态条;状态条;CDialogBarCDialogBar对话条。对话条。2024/7/20(7)绘画对象类绘画对象类CGdiObject类类图形绘画对象子层次结构以图形绘画对象子层次结构以CGdiObjectCGdiObject类为根类为根类类; ;可用于建立绘画对象模型,如画笔、刷子、字可用于建立绘画对象模型,如画笔、刷子、字体、位图、调色板等。体、位图、调色板等。其子类有:其子类有:CbitmpCbitmp: :位图位图CbrushCbrush: :刷子刷子CfontCfont: :字体字体CpaletteCpalette: :调色板调色板CPenCPen: :画笔画笔CRgnCRgn: :域域2024/7/20(8)设备描述表类设备描述表类CDC类类是是CObjectCObject类的子类;其子类有:类的子类;其子类有:CpainDCCpainDCCClientDCCClientDCCWindowDCCWindowDCCMetaFileDCCMetaFileDC该类及其子类支持设备描述表对象;该类及其子类支持设备描述表对象;包括许多成员函数,如映射函数、绘画工包括许多成员函数,如映射函数、绘画工具函数、区域函数等,可以完成所有的绘具函数、区域函数等,可以完成所有的绘画工作。画工作。2024/7/206.通用类通用类v此类提供了许多通用服务,例如:此类提供了许多通用服务,例如:文件文件I/OI/O诊断和异常处理诊断和异常处理如数组和列表等存放数据集的类。如数组和列表等存放数据集的类。2024/7/20(1)文件类文件类用以编写输入输出处理函数。用以编写输入输出处理函数。主要文件类有:主要文件类有:CFileCFile类类: :访问二进制磁盘文件访问二进制磁盘文件CMemFileCMemFile类:访问住内存文件类:访问住内存文件CStdioFileCStdioFile类:访问(文本)磁盘文件类:访问(文本)磁盘文件CArchiveCArchive类:与类:与CfileCfile对象一起通过串行化实现对对象一起通过串行化实现对象的永久存储。象的永久存储。2024/7/20(2)异常类异常类CException类类CExceptionCException是所有异常情况的是所有异常情况的基类基类。不能直接建立不能直接建立CExceptionCException对象,只能建立对象,只能建立派生派生类类的对象,用派生类来捕获指定的异常情况的对象,用派生类来捕获指定的异常情况CexceptionCexception的派生类有:的派生类有:CArchiveExceptionCArchiveException类类: :归档异常归档异常CFileExceptionCFileException类类: :文件异常文件异常CMemoryExceptionCMemoryException类类: :内存(不够)异常内存(不够)异常CNotSupportedExceptionCNotSupportedException类类: :不支持服务异常不支持服务异常CResourceExceptionCResourceException类类: :装载资源(失败)异常装载资源(失败)异常CUseExceptionCUseException类类: :用于停止用户的操作异常用于停止用户的操作异常2024/7/20(3)模板收集类模板收集类可将多种对象存放到数组、列表和可将多种对象存放到数组、列表和“ 映射映射”中。中。但这些收集类是模板,它们的参数确定了存放在但这些收集类是模板,它们的参数确定了存放在集合中的对象类型。集合中的对象类型。主要的模板收集类有:主要的模板收集类有:CArryCArry类类: :元素存入数组元素存入数组CMapCMap类类: :键映射到值键映射到值CListCList类类: :元素存入链表元素存入链表CTypedPtrListCTypedPtrList类类: :将对象指针存入链表的类型将对象指针存入链表的类型CTypedPtrArrayCTypedPtrArray类类: :将对象指针存入数组的类型将对象指针存入数组的类型CTypedPtrMapCTypedPtrMap类类: :将键指针映射到值指针的类型将键指针映射到值指针的类型2024/7/207. OLE类类v对象连接与嵌入类对象连接与嵌入类包括包括3 3组组, ,共共9 9个类。个类。v普通类普通类COleDocuemntCOleDocuemntCOleItemCOleItemCOleExceptionCOleExceptionv客户类客户类COleClientDocCOleClientDocCOleClientItemCOleClientItemv服务器类服务器类COleServerCOleServerCOleTemplateCOleTemplateCOleServerDocCOleServerDocCOleServerItemCOleServerItem2024/7/20开放数据库连接开放数据库连接层提供了一些类来支持层提供了一些类来支持ODBCODBC特征特征, ,即通过这些类可开发数据库应用程序来访问多个数即通过这些类可开发数据库应用程序来访问多个数据库文件。据库文件。主要包括的类主要包括的类:CDataBaseCDataBase类:对一个数据源的连接类:对一个数据源的连接CrecordsetCrecordset类:选一组记录类:选一组记录CRecordViewCRecordView类:直接连接一记录集的格式视类:直接连接一记录集的格式视CFieldExchangeCFieldExchange类:支持记录字段交换类:支持记录字段交换CLongBinaryCLongBinary类:封装一存储句柄类:封装一存储句柄CDBExceptionCDBException类:数据存取处理(失败)异常类:数据存取处理(失败)异常7. ODBC数据库类数据库类8.3.8.3. MFCMFC中全局函数与中全局函数与全局变量全局变量2024/7/20以以Afx(ApplicationAfx(Application Framework Framework Extension)Extension)开头的函数除开头的函数除数据库类数据库类函数和函数和DDX(DialogDDX(Dialog Data Exchange) Data Exchange)函数外,都是函数外,都是全全局函数局函数。以以AfxAfx为前缀的变量,都是为前缀的变量,都是全局变量全局变量。MFCMFC中全局函数和全局变量中全局函数和全局变量2024/7/20全局函数全局函数8.48.4 应用程序向导应用程序向导及其应用及其应用2024/7/20应用程序向导提供了一个基于应用程序向导提供了一个基于MFCMFC的的应应用程序框架用程序框架;程序员可在此程序员可在此框架框架基础上添加实现特基础上添加实现特定功能的代码。定功能的代码。向导及其应用向导及其应用2024/7/2044MFC应用应用程序向导程序向导File-New-MFCAppWizardProjectname2024/7/2045MFCAppWizardStep1对话框对话框所使用的所使用的语言文字语言文字建立的应用建立的应用程序的类型程序的类型2024/7/2046MFCAppWizardStep2对话框对话框选择数选择数据库的据库的支持支持2024/7/2047MFCAppWizardStep3对话框对话框选择复选择复合文件合文件支持支持2024/7/2048MFCAppWizardStep4对话框对话框选择应选择应用程序用程序界面外界面外观观2024/7/2049MFCAppWizardStep5对话框对话框选择应用选择应用程序风格程序风格选择库选择库的链接的链接方式方式选择应用选择应用程序注释程序注释2024/7/2050MFCAppWizardStep6对话框对话框设置所生成设置所生成的文件名和的文件名和类名类名2024/7/2051NewProjectInformation对话框对话框2024/7/2052MFCAppWizard自动生成程序框架自动生成程序框架8.58.5 MFCMFC程序结构程序结构MFC程序结构程序结构v1、Mini-MFC程序结构程序结构CWinApp+CFrameWnd在此方案中,主应用程序窗口为框架窗口,在此方案中,主应用程序窗口为框架窗口,CFrameWnd派生类对象附属于应用程序的派生类对象附属于应用程序的CWinApp派生类对象的派生类对象的m_pMainWnd成员。成员。v2、基于对话框的应用程序、基于对话框的应用程序CWinApp+CDialog基于对话框的应用程序与基于框架窗口的应用程序差基于对话框的应用程序与基于框架窗口的应用程序差别不大,只是用别不大,只是用CDialog派生类对象代替了派生类对象代替了CFrameWnd派生类对象作为应用程序的主窗口。派生类对象作为应用程序的主窗口。v3、基于文档、基于文档/视图结构的应用程序视图结构的应用程序文档文档/视图应用具有较复杂的结构,当然其功能视图应用具有较复杂的结构,当然其功能也相应增强。基于文档也相应增强。基于文档/视图结构的应用程序又可视图结构的应用程序又可分为单文档界面(分为单文档界面(SDI)和多文档界面()和多文档界面(MDI),),后者更复杂些。后者更复杂些。2024/7/20CWinAppv功能:初始化和运行程序。功能:初始化和运行程序。MFC应用程序只能包含一个应用程序对应用程序只能包含一个应用程序对象,该对象在象,该对象在Windows系统调用系统调用WinMain函数的时候已经由系统构造完毕。函数的时候已经由系统构造完毕。用户应该声明用户应该声明CWinApp派生类为全局对派生类为全局对象。用户从象。用户从CWinApp派生了一个应用程序派生了一个应用程序类之后,可以重载类之后,可以重载InitInstance成员函数来成员函数来创建应用程序的主窗口对象。创建应用程序的主窗口对象。2024/7/20CFrameWndv应用程序主窗口的功能应用程序主窗口的功能1、保存数据、保存数据-数据成员数据成员2、消息处理函数、消息处理函数-成员函数成员函数v创建框架窗口的三种方法:创建框架窗口的三种方法:1、使用、使用Create函数函数2、使用、使用LoadFrame函数函数3、使用文档模板间接创建、使用文档模板间接创建2024/7/20深入理解深入理解CWinAppv简单的简单的MFC程序程序#includeclassMyApp:publicCWinApppublic:BOOLInitInstance()/程序入点程序入点CFrameWnd*Frame=newCFrameWnd();/构造框架构造框架m_pMainWnd=Frame;/将将m_pMainWnd设定为设定为Frame;Frame-Create(NULL,最简单的窗口最简单的窗口);/建立框架建立框架Frame-ShowWindow(SW_SHOW);/显示框架显示框架returntrue;/返回返回;MyApptheApp;/建立应用程序。建立应用程序。2024/7/208.68.6消息映射消息映射消息映射消息映射消息映射本质上就是一个数组,消息映射本质上就是一个数组,MFC使使用消息映射建立消息和类的成员函数的对应用消息映射建立消息和类的成员函数的对应关系。消息映射数组中存储的信息关系。消息映射数组中存储的信息v(1)所处理的消息;所处理的消息;v(2)消息应用的控件消息应用的控件ID,或者,或者ID范围;范围;v(3)消息所传递的参数;消息所传递的参数;v(4)消息所期望的返回值。消息所期望的返回值。消息映射宏消息映射宏1.ON_MESSAGE:处理任意消息:处理任意消息v语法规则:语法规则:ON_MESSAGE(ID,func)LRESULTfunc(WPARAMwParam,LPARAMlParam);v举例:举例:ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown)LRESULTOnLButtonDown(WPARAMwParam,LPARAMlParam);2024/7/202.ON_COMMAND:处理:处理WM_COMMAND消息消息v语法规则:语法规则:ON_COMMAND(ID,func)voidfunc();v举例:举例:ON_COMMAND(ID_OPER_TEST,OnOperTest)voidOnOperTest();2024/7/20消息映射步骤消息映射步骤v1、在、在BEGIN_MESSAGE_MAP和和END_MESSAGE_MAP之间添加消息映射宏;之间添加消息映射宏;BEGIN_MESSAGE_MAP(CDemoView,CView)ON_MESSAGE(WM_LBUTTONDOWN,OnLButtonDown)ON_COMMAND(ID_OPER_TEST,OnOperTest)END_MESSAGE_MAP()v2、在类声明中声明成员函数;、在类声明中声明成员函数;v3、在类的实现部分实现成员函数。、在类的实现部分实现成员函数。2024/7/20DECLARE_MESSAGE_MAPv从从CCmdTarget派生的类需要提供消息映射来处派生的类需要提供消息映射来处理消息理消息v在类的末尾使用在类的末尾使用vExampleforDECLARE_MESSAGE_MAPclassCMyWnd:publicCFrameWnd/MemberdeclarationsDECLARE_MESSAGE_MAP();2024/7/20程序举例程序举例-吹泡泡程序吹泡泡程序v程序功能:每当用户在窗口客户区中按下程序功能:每当用户在窗口客户区中按下鼠标左键时即可产生一个泡泡。鼠标左键时即可产生一个泡泡。2024/7/208.78.7图形和文字输出图形和文字输出设备环境(设备环境(DC)CPaintDC与与CClientDCvCPaintDCCPaintDC封装的设备环境代表普通的窗口。封装的设备环境代表普通的窗口。CPaintDC类的构造函数调用类的构造函数调用BeginPaint函数函数,析构析构函数调用函数调用EndPaint函数。函数。vCClientDCCClientDC封装的设备环境代表窗口的客户区。封装的设备环境代表窗口的客户区。CClientDC类的构造函数调用类的构造函数调用GetDC函数函数,析构函析构函数调用数调用ReleaseDC函数。函数。绘图函数绘图函数v文字信息显示文字信息显示BOOLTextOut(intx,inty,LPCTSTRlpszString););在指定坐标(在指定坐标(x,y)处显示字符串)处显示字符串lpszString的内容,显示成功返回非的内容,显示成功返回非0值,否则返回值,否则返回0。坐。坐标原点(标原点(0,0)在客户区左上角,)在客户区左上角,Y轴向下。轴向下。2024/7/20绘图函数绘图函数v画线函数画线函数画线工作需经两步完成:首先确定线的起始端画线工作需经两步完成:首先确定线的起始端位置,这可通过调用成员函数位置,这可通过调用成员函数MoveTo完成,完成,其原型为:其原型为:CPointMoveTo(intx,inty);CPointMoveTo(POINTpoint);MoveTo将绘图位置(将绘图位置(“看不见看不见”)移至指定)移至指定坐标处,并返回移动前的绘图位置。坐标处,并返回移动前的绘图位置。2024/7/20绘图函数绘图函数v画线函数画线函数确定了线的起点后,即可使用成员函数确定了线的起点后,即可使用成员函数LineTo画线:画线:BOOLLineTo(intx,inty);BOOLLineTo(POINTpoint);其参数为线终点的坐标。其参数为线终点的坐标。2024/7/20绘图函数绘图函数v绘制矩形绘制矩形绘制矩形的成员函数为:绘制矩形的成员函数为:BOOLRectangle(intx1,inty1,intx2,inty2);BOOLRectangle(LPCRECTlpRect);其参数为需要绘制的矩形的左上角坐标(其参数为需要绘制的矩形的左上角坐标(x1,y1)和右下角坐标()和右下角坐标(x2,y2)。)。2024/7/20绘图函数绘图函数v绘制椭圆绘制椭圆该成员函数的原型为:该成员函数的原型为:BOOLEllipse(intx1,inty1,intx2,inty2);BOOLEllipse(LPCRECTlpRect);其参数的含义为所绘椭圆的包含矩形的左上角和其参数的含义为所绘椭圆的包含矩形的左上角和右下角坐标。右下角坐标。2024/7/20绘图函数绘图函数v绘制多边形绘制多边形BOOLPolygon(LPPOINTlpPoints,intnCount);其中参数其中参数lpPoints为一为一LPPOINT类型的指针,可类型的指针,可用用CPoint数组(存放多边形的各顶点坐标)作为数组(存放多边形的各顶点坐标)作为实参。参数实参。参数nCount为顶点个数。为顶点个数。2024/7/20画笔画笔v画笔是用来画线的工具,是画笔是用来画线的工具,是CPen类的对象。其类的对象。其使用方法为:使用方法为:1、声明画笔对象,并创建宽度为、声明画笔对象,并创建宽度为3的红色实线画笔的红色实线画笔CPenRedPen;RedPen.CreatePen(PS_SOLID,3,RGB(255,0,0);2024/7/20图形和文字输出图形和文字输出2、使用新的画笔,保存原来的画笔以便恢复、使用新的画笔,保存原来的画笔以便恢复CPen*pOldPen;pOldPen=dc.SelectObject(&RedPen);。/绘图绘图3、恢复原来的画笔、恢复原来的画笔dc.SelectObject(pOldPen);2024/7/20图形和文字输出图形和文字输出v保存并恢复原来画笔的原因是,每个图形保存并恢复原来画笔的原因是,每个图形设备接口对象要占用一个设备接口对象要占用一个HDC句柄,而可句柄,而可用的句柄数量是有限的,在使用完后要及用的句柄数量是有限的,在使用完后要及时释放。否则,每次执行时释放。否则,每次执行OnPaint()函数()函数时均要重新创建图形接口对象,未被释放时均要重新创建图形接口对象,未被释放的非法句柄会留在设备上下文对象中,积的非法句柄会留在设备上下文对象中,积累下去将导致严重的运行错误。累下去将导致严重的运行错误。2024/7/20图形和文字输出图形和文字输出v画刷画刷画刷是用来填充图形的工具,是画刷是用来填充图形的工具,是CBrush类的类的对象,使用方法与画笔类似,也要定义画刷对对象,使用方法与画笔类似,也要定义画刷对象,创建画刷并保存原来的画刷,在绘图工作象,创建画刷并保存原来的画刷,在绘图工作结束后恢复原来的画刷。结束后恢复原来的画刷。2024/7/20图形和文字输出图形和文字输出v创建画刷的成员函数的原型为:创建画刷的成员函数的原型为:BOOLCreateSolidBrush(COLORREFcrColor);参数参数crColor指定了画刷的颜色。指定了画刷的颜色。除此而外,还可以创建一个阴影风格的画刷:除此而外,还可以创建一个阴影风格的画刷:BOOLCreateHatchBrush(intnIndex,COLORREFcrColor);其中参数其中参数nIndex指定了阴影风格。指定了阴影风格。2024/7/20图形和文字输出图形和文字输出v字体字体:CFontBOOLCreateFontIndirect(constLOGFONT*lpLogFont);BOOLCreateFont(intnHeight,intnWidth,intnEscapement,intnOrientation,intnWeight,BYTEbItalic,BYTEUnderline,BYTEcStrikeOut,BYTEnCharSet,BYTEnOutPrecision,BYTEClipPrecision,BYTEnQuality,BYTEnPitchAndFamily,LPCTSTRlpszFacename);2024/7/20vCDC类的类的SelectObject()函数原型如下:()函数原型如下:CPen*SelectObject(CPen*pPen);CBrush*SelectObject(CBrush*pBrush);CFont*SelectObject(CFont*pFont);2024/7/20Mini-MFC编程举例编程举例-鼠标绘图程序鼠标绘图程序v设计设计Mini-MFC应用程序,实现下面的功能:应用程序,实现下面的功能:(1)按下)按下CTRL键,拖动鼠标绘制矩形;键,拖动鼠标绘制矩形;(2)按下)按下SHIFT键,拖动鼠标绘制椭圆。键,拖动鼠标绘制椭圆。v设计思想:设计思想:WM_LBUTTONDOWN记录坐标点记录坐标点WM_MOUSEMOVE动态绘制图形动态绘制图形WM_LBUTTONUP确定最终图形确定最终图形鼠标消息的子参数包含按键的状态信息,可据以鼠标消息的子参数包含按键的状态信息,可据以判断判断CTRL键和键和SHIFT键的状态。键的状态。2024/7/20
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号