网络编程实用教程第4章-MFC编程.ppt
《网络编程实用教程第4章-MFC编程.ppt》由会员分享,可在线阅读,更多相关《网络编程实用教程第4章-MFC编程.ppt(97页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、网络编程实用教程第第4章章MFC编程编程补充知识Windows操作系统的操作系统的API接口接口SDK(软件开发包)(软件开发包)u微软提供的操作系统开发接口微软提供的操作系统开发接口u也叫也叫APIu由一些函数组成由一些函数组成补充知识SDK与与MFC的区别的区别:u利用利用API接口函数编程也叫接口函数编程也叫WIN32接口编程接口编程u利用利用VC+编程叫做编程叫做MFC编程编程uWin32应用程序接口直接调用应用程序接口直接调用API函数,非面函数,非面向对象;向对象;类似于类似于C语言程序设计语言程序设计uMFC是对是对API的封装,形成的封装,形成MFC的的C+类,是类,是面向对象
2、的编程模式;面向对象的编程模式;类似于类似于C+程序设计程序设计4.1MFC概述概述4.1.1 MFC是一个编程框架 MFC MFC应用程序框架,简称应用程序框架,简称MFCMFC框架,是由框架,是由MFC MFC(Microsoft Foundation Class LibraryMicrosoft Foundation Class Library)中的)中的各种类结合起来构成的。各种类结合起来构成的。u从总体上定义了应用程序的轮廓从总体上定义了应用程序的轮廓u提供了用户接口的标准实现方法提供了用户接口的标准实现方法u程序员只须通过预定义的接口把具体应用程序特程序员只须通过预定义的接口把具体
3、应用程序特有的东西填入这个轮廓,就能建立有的东西填入这个轮廓,就能建立WindowsWindows下的应下的应用程序用程序4.1.1 MFC是一个编程框架VC+VC+提供了相应的工具来完成这个工作:提供了相应的工具来完成这个工作:u用用应用程序向导应用程序向导可以生成应用程序的骨架;可以生成应用程序的骨架;u用用资源编辑器资源编辑器可以直观地设计用户接口;可以直观地设计用户接口;u用用类向导类向导可以将代码添加到骨架文件可以将代码添加到骨架文件 ;4.1.1 MFC是一个编程框架1 1MFCMFC类库封装的内容类库封装的内容 n对对Win32Win32应用程序编程接口的封装应用程序编程接口的封
4、装 MFCMFC将每一个将每一个WindowsWindows对象封装成一个相应的对象封装成一个相应的C+C+对象。对象。n对应用程序概念的封装对应用程序概念的封装 使用使用SDKSDK编写编写WindowsWindows应用程序时,总要定义窗口应用程序时,总要定义窗口过程,注册过程,注册Windows Class Windows Class,创建窗口等等,要做许,创建窗口等等,要做许多处理工作。多处理工作。MFC MFC 封装了这些处理,替程序员完成这封装了这些处理,替程序员完成这些工作。些工作。4.1.1 MFC是一个编程框架n对对COM/OLECOM/OLE特性的封装特性的封装 OLE O
5、LE(对象的链接与嵌入)建立在(对象的链接与嵌入)建立在COM(COM(组件对象组件对象模型模型)之上,由于支持之上,由于支持OLEOLE的应用程序必须实现一系列的应用程序必须实现一系列的接口的接口,因而相当繁琐。因而相当繁琐。MFC MFC 的的OLEOLE类封装了类封装了OLE API OLE API 大量的复杂工作,提供了实现大量的复杂工作,提供了实现OLEOLE的更高级接口。的更高级接口。n对对ODBCODBC功能的封装功能的封装 MFCMFC封装了封装了ODBC API ODBC API 的大量的复杂的工作,形成的大量的复杂的工作,形成了与了与ODBCODBC之间接口的高级之间接口的
6、高级C+C+类,提供了一种方便的类,提供了一种方便的访问数据库的编程模式。访问数据库的编程模式。4.1.1 MFC是一个编程框架2 2MFCMFC类的继承关系类的继承关系 MFC MFC 将众多类的共同特性抽象出来,设计出将众多类的共同特性抽象出来,设计出一些基类一些基类,作,作为实现其他类的基础。有两个类十分重要:为实现其他类的基础。有两个类十分重要:uCObjectCObject:是是MFCMFC的根类,绝大多数的根类,绝大多数MFC MFC 类是从它派生的。类是从它派生的。实现了一些重要的特性:实现了一些重要的特性:动态类信息(运行时类信息)动态类信息(运行时类信息)-运行时检索类或对象
7、的信息运行时检索类或对象的信息动态创建动态创建对象序列化对象序列化Serialize(CArchive&ar)Serialize(CArchive&ar)对程序调试对程序调试DumpDump、AssertValidAssertValid 从从CObject CObject 派生的类都可以具备派生的类都可以具备CObjectCObject所拥有的特性。所拥有的特性。4.1.1 MFC是一个编程框架序列化的概念序列化的概念-实现对象的持久性实现对象的持久性 为实现对象的持久性,通常多以为实现对象的持久性,通常多以字节流字节流的形式将的形式将记录对象状态的数据存放到磁盘上,这种记录对象状态的数据存放
8、到磁盘上,这种将状态数据将状态数据保存到磁盘和从磁盘恢复到内存的过程称为序列化保存到磁盘和从磁盘恢复到内存的过程称为序列化。4.1.1 MFC是一个编程框架uCCmdTargetCCmdTarget类:从类:从CObjectCObject派生。通过进一步封派生。通过进一步封装一些属性和方法,提供了装一些属性和方法,提供了消息处理的架构消息处理的架构。在在MFC MFC 中,中,任何可以处理消息的类都是从此类任何可以处理消息的类都是从此类派生的派生的。CWndCWndCButtonCButtonCComboBoxCComboBoxCEditCEditCDialogCDialog 4.1.1 MF
9、C是一个编程框架 针对每种不同的对象,针对每种不同的对象,MFC MFC 都设计了一组类对这都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:生出众多更具体的类。这些对象包括以下种类:u窗口对象:窗口对象:基类是基类是CWndCWnd;u应用程序对象:应用程序对象:基类是基类是CwinThreadCwinThread;u文档对象:文档对象:基类是基类是CdocumentCdocument。可以结合自己的实际,从适当的可以结合自己的实际,从适当的MFC MFC 类中派生出类中派生出自己的类,实现
10、特定的功能,达到自己的编程目的。自己的类,实现特定的功能,达到自己的编程目的。4.1.1 MFC是一个编程框架3 3虚拟函数和动态约束虚拟函数和动态约束(多态性)多态性)MFC MFC 建立了建立了消息映射机制消息映射机制,以一种富有效率、便,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。于使用的手段解决消息处理函数的动态约束问题。程序员在继承基类的同时,可把自己实现的虚拟程序员在继承基类的同时,可把自己实现的虚拟函数和消息处理函数嵌入函数和消息处理函数嵌入 MFC MFC的编程框架。的编程框架。MFC MFC 框架框架将在适当的时候、适当的地方来调用程序的代码。将在适当的时候
11、、适当的地方来调用程序的代码。多态性多态性根据不同的情况执行不同的操作。根据不同的情况执行不同的操作。4.1.1 MFC是一个编程框架4MFC的开发模板的开发模板 MFC MFC 实现了对应用程序概念的封装,实现了类、实现了对应用程序概念的封装,实现了类、类的继承、动态约束、类的关系和相互作用的封装。类的继承、动态约束、类的关系和相互作用的封装。这样封装的结果是为程序员提供了一套开发模板,罗这样封装的结果是为程序员提供了一套开发模板,罗列在列在应用程序向导应用程序向导中。针对不同的应用和目的,程序中。针对不同的应用和目的,程序员可以采用不同的模板。员可以采用不同的模板。这些模板都采用以这些模板
12、都采用以文档文档-视图视图为中心的思想,每为中心的思想,每个模板都包含一组特定的类。个模板都包含一组特定的类。4.1.2 典型的MDI应用程序的构成 用用AppWizardAppWizard产生一个没有产生一个没有 OLE OLE等支持的等支持的 MDI MDI 工工程程T T,AppWizard AppWizard 会自动创建一系列文件,构成一个会自动创建一系列文件,构成一个应用程序骨架。这些文件分为四类:应用程序骨架。这些文件分为四类:u头文件(头文件(.h.h)u实现文件实现文件(.cpp)(.cpp)u资源文件资源文件(.rc)(.rc)u模块定义文件模块定义文件(.def)(.def
13、)这里显示的是文档这里显示的是文档1、构成应用程序的对象图图4.1 4.1 一个一个MDIMDI应用程序的构成应用程序的构成 1、构成应用程序的对象(1)应用程序类)应用程序类CTApp(2)主边框窗口类)主边框窗口类CMainFrame(3)文档边框窗口类)文档边框窗口类CChildFrame(4)文档)文档CTDoc(5)视图)视图CTView(6)文档模板)文档模板2构成应用程序的对象之间的关系图图4.2 4.2 各对象之间的派生关系各对象之间的派生关系 3构成应用程序的文件头文件头文件用途用途stdafx.h标准标准AFX头文件头文件 resource.h定义了各种资源定义了各种资源I
14、D t.h#include resource.h定义了从定义了从CWinApp派生的应用程序对象派生的应用程序对象CTAppchildfrm.h定义了从定义了从CMDIChildWnd派生的文档框架窗口对象派生的文档框架窗口对象CTChildFrame mainfrm.h定义了从定义了从CMDIFrameWnd派生的框架窗口对象派生的框架窗口对象CMainFrame tdoc.h定义了从定义了从CDocument派生的文档对象派生的文档对象CTDoc tview.h定义了从定义了从CView派生的视图对象派生的视图对象CTView 4.1 AppWizard4.1 AppWizard所生成的头
15、文件所生成的头文件3构成应用程序的文件实现文件实现文件 所包含的头文件所包含的头文件 实现的内容和功能实现的内容和功能 stdafx.cpp stdafx.h全局函数、结构和宏的标识符全局函数、结构和宏的标识符t.cpp stdafx.h MainFrm.h childfrm.h tdoc.h tview.h t.h定义定义CTApp的实现,并定义的实现,并定义CTApp类型的全局变量类型的全局变量theAppchildfrm.cpp stdafx.ht.h childfrm.h 实现了类实现了类CChildFrame childfrm.cpp stdafx.h t.h childfrm.h
16、实现了类实现了类CMainFrame tdoc.cpp stdafx.h t.h tdoc.h实现了类实现了类CTDoc tview.cppstdafx.h t.htdoc.h tview.h实现了类实现了类CTview表表4.2 4.2 实现文件与头文件的包含关系实现文件与头文件的包含关系4.2 MFC和Win324.2.1 MFC对象和Windows对象的关系 MFC MFC 中最重要的封装是对中最重要的封装是对Win32 API Win32 API 的封装,因的封装,因此,理解此,理解Windows Windows 对象对象和和MFC MFC 对象对象之间的关系是理解之间的关系是理解MF
17、CMFC的一个关键:的一个关键:uWindowsWindows对象是对象是Win32Win32下用下用句柄句柄表示的表示的WindowsWindows操操作系统对象作系统对象;uMFCMFC对象是对象是C+C+对象对象,是一个,是一个C+C+类的实例。类的实例。两者有很大的区别,但联系紧密两者有很大的区别,但联系紧密 4.2.1 MFC对象和Windows对象的关系以窗口对象为例:以窗口对象为例:uMFC窗口对象是窗口对象是CWnd类的实例,程序直接利类的实例,程序直接利用构造函数创建;用构造函数创建;uWindows窗口则是操作系统的一个内部数据结窗口则是操作系统的一个内部数据结构的实例,有
18、一个构的实例,有一个“窗口句柄窗口句柄”标识,操作系标识,操作系统创建它并给它分配系统资源;统创建它并给它分配系统资源;uMFC窗口对象的窗口对象的“窗口句柄窗口句柄”保存在对象的保存在对象的m_hWnd成员变量中;成员变量中;uWindows窗口可以被一个程序销毁,也可以被窗口可以被一个程序销毁,也可以被用户的动作销毁;用户的动作销毁;MFC窗口由析构函数销毁。窗口由析构函数销毁。4.2.1 MFC对象和Windows对象的关系以窗口对象为例:以窗口对象为例:图图4.3 MFCMFC的的CWndCWnd类窗口对象和类窗口对象和WindowsWindows的窗口对象的关系的窗口对象的关系4.2
19、.1 MFC对象和Windows对象的关系 其他的其他的Windows Windows 对象和对应的对象和对应的MFC MFC 对象也对象也有类似的关系。有类似的关系。多方面对MFC对象和Windows对象比较1、对应的数据结构不同、对应的数据结构不同uMFC对象是相应对象是相应C+类的实例,这些类是类的实例,这些类是MFC或者程序员定义的;或者程序员定义的;uWindows对象是对象是Windows系统的系统的内部结构内部结构,通过一个通过一个句柄句柄来引用;来引用;uMFC的类定义了一个成员变量的类定义了一个成员变量m_hWnd来保存来保存MFC对象对应的对象对应的Windows对象的句柄
20、。对象的句柄。补充什么叫句柄什么叫句柄(Handle)?-游戏手柄游戏手柄 32 32位的整数,是位的整数,是 WINDOWS WINDOWS 在内存中维护的在内存中维护的一个一个对象内存物理地址列表的整数索引对象内存物理地址列表的整数索引。WINDOWS WINDOWS 的内存管理经常会将当前空闲对象的内的内存管理经常会将当前空闲对象的内存释放掉,当需要时访问再重新提交到物理内存。所存释放掉,当需要时访问再重新提交到物理内存。所以对象的物理地址是变化的,不允许程序直接通过物以对象的物理地址是变化的,不允许程序直接通过物理地址来访问对象。程序将想访问的对象的句柄传递理地址来访问对象。程序将想访
21、问的对象的句柄传递给系统,系统根据句柄检索自己维护的对象列表就能给系统,系统根据句柄检索自己维护的对象列表就能知道程序想访问的对象及其物理地址了。知道程序想访问的对象及其物理地址了。2、所处的层次不同、所处的层次不同uMFC对象对象是高层的,是高层的,Windows对象对象是低层的;是低层的;uMFC对象对象封装了封装了Windows对象对象的大部分或全部的大部分或全部功能,同时封装了功能,同时封装了Windows对象的句柄;对象的句柄;3、创建的机制、创建的机制uMFC对象对象通过构造函数由程序直接创建;通过构造函数由程序直接创建;Windows对象对象由相应的由相应的SDK函数创建。函数创
22、建。多方面对MFC对象和Windows对象比较多方面对MFC对象和Windows对象比较4、转换的方式不同、转换的方式不同u可以从一个可以从一个MFC对象对象得到对应的得到对应的Windows对象对象的句柄;使用的句柄;使用MFC对象对象的的GetSafeHandle成员成员函数得到对应的句柄。函数得到对应的句柄。u可以从一个已存在的可以从一个已存在的Windows对象对象创建一个对创建一个对应的应的MFC对象对象;一般使用;一般使用MFC对象对象的成员函数的成员函数Attach或者或者FromHandle来创建,前者得到一来创建,前者得到一个永久性对象,后者得到的可能是一个临时对个永久性对象
23、,后者得到的可能是一个临时对象。(象。(m_hWnd)多方面对MFC对象和Windows对象比较5、使用范围不同、使用范围不同uMFC对象对象服务于创建它的进程;服务于创建它的进程;uWindows对象对象创建后,其句柄是整个创建后,其句柄是整个Windows系统系统全局全局的。一些句柄可以被其他进程使用。的。一些句柄可以被其他进程使用。u对同一个进程的线程来说,只可以使用本线程创对同一个进程的线程来说,只可以使用本线程创建的建的MFC对象对象,不能使用其他线程的,不能使用其他线程的MFC对象对象。多方面对MFC对象和Windows对象比较6、销毁方法不同、销毁方法不同uMFC对象对象随着析构
24、函数的调用而消失;但随着析构函数的调用而消失;但Windows对象对象必须由相应的必须由相应的Windows系统函系统函数销毁。数销毁。特例:特例:设备描述表设备描述表CDC类的对象有所不同,它对应的类的对象有所不同,它对应的HDC句柄对象可能不是被销毁,而是被释放。句柄对象可能不是被销毁,而是被释放。WindowsWindows对象对应的对象对应的MFCMFC对象对象描述描述Windows句柄句柄MFC对象对象窗口窗口HWNDCWnd及其派生类及其派生类设备上下文设备上下文HDCCDC及其派生类及其派生类菜单菜单HMENUCMenu笔笔HPENCGdiObject,CPen及其派生类及其派生
25、类刷子刷子HBRUSHCGdiObject,CBrush及其派生类及其派生类字体字体HFONTCGdiObject,CFont及其派生类及其派生类位图位图HBITMAPCGdiObject,CBitmap及其派生类及其派生类调色板调色板HPALETTECGdiObject,CPalette及其派生类及其派生类区域区域HRGNCGdiObject,CRgn及其派生类及其派生类图像列表图像列表HimageLISTCImageList及其派生类及其派生类套接字套接字SOCHETCSocket,CAsynSocket及其派生类及其派生类4.2.2 几个主要的类1、Win32API的窗口对象的窗口对象用
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网络 编程 实用教程 MFC
限制150内