没有合适的资源?快使用搜索试试~ 我知道了~
首页个人觉得蛮好的MFC教程
个人觉得蛮好的MFC教程
需积分: 13 12 下载量 180 浏览量
更新于2023-03-16
评论
收藏 1.58MB DOC 举报
目录 1 MFC概述….............................................................................................................1 2 MFC和WIN32………………………………………………………………………………5 3 CObject类………………………………………………………………………………..…19 4 消息映射的实现……………………………………………………………………………..27 5 MFC对象的创建…………………………………………………………………………….55 6 应用程序的退出……………………………………………………………………………..85 7 MFC的DLL………………………………………………………………………………….88 8 MFC的进程和线程………………………………………………………………………….94 9 MFC的状态…………………………………………………………………………………103 10 内存分配方式和调试方式………………………………………………………………..128 11 MFC下的文件类…………………………………………………………………………..133 12 对话框和对话框类CDialog……………………………………………………………..139 13 MFC工具条和状态栏……………………………………………………………………..160 14 SOCKET类的设计和实现…………………………………………………………………189
资源详情
资源评论
资源推荐
MFC 概述
1. MFC 是一个编程框架
中的各种类结合起来构成了一个应用程序框架,它的目的
就是让程序员在此基础上来建立 下的应用程序,这是一种相对 来说更为简单的方法。因
为总体上, 框架定义了应用程序的轮廓,并提供了用户接口的标准实现方法,程序员所要做的就是
通过预定义的接口把具体应用程序特有的东西填入这个轮廓。提供了相应的工具
来完成这个工作: 可以用来生成初步的框架文件(代码和资源等);资源编辑器用于帮助直
观地设计用户接口; 用来协助添加代码到框架文件;最后,编译,则通过类库实现了应用
程序特定的逻辑。
1. 封装
构成 框架的是 类库。 类库是 类库。这些类或者封装了 ! 应用程序编程接口,
或者封装了应用程序的概念,或者封装了 "# 特性,或者封装了 "$ 和 " 数据访问的功能,等等,
分述如下。
(%)对 ! 应用程序编程接口的封装
用一个 "&' 来包装一个 "&'。例如: 是一个
&',它把 ()和 有关的 *+ 函数封装在
&' 的成员函数内,后者的成员变量 ,-. 就是前者的窗口句柄。
(!)对应用程序概念的封装
使用 编写 应用程序时,总要定义窗口过程,登记 ,创建窗口,等等。
把许多类似的处理封装起来,替程序员完成这些工作。另外, 提出了以文档/视图为中心的编程
模式, 类库封装了对它的支持。文档是用户操作的数据对象,视图是数据操作的窗口,用户通过它
处理、查看数据。
( )对 "0"# 特性的封装
"# 建立在 " 模型之上,由于支持 "# 的应用程序必须实现一系列的接口(+''),因而相当
繁琐。 的 "# 类封装了 "#*+ 大量的复杂工作,这些类提供了实现 "# 的更高级接口。
(1)对 "$ 功能的封装
以少量的能提供与 "$ 之间更高级接口的 类,封装了 "$*+ 的大量的复杂的工作,提供了
一种数据库编程模式。
2. 继承
首先, 抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类
是 "&' 和 ,23'。"&' 是 的根类,绝大多数 类是其派生的,包括
,23'。"&'实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调
试的支持,等等。所有从 "&' 派生的类都将具备或者可以具备 "&' 所拥有的特性。
,23' 通过封装一些属性和方法,提供了消息处理的架构。 中,任何可以处理消息的类都从
,23' 派生。
针对每种不同的对象, 都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生
出众多更具体的类。这些对象包括以下种类:窗口对象,基类是 ;应用程序对象,基类是
2.';文档对象,基类是 ,',等等。
程序员将结合自己的实际,从适当的 类中派生出自己的类,实现特定的功能,达到自己的编程目的。
3. 虚拟函数和动态约束
以“4为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:
如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,
封装 窗口对象时,每一条 消息对应一个成员函数,这些成员函数为派生类所
继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是, 建立了消息映射
机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。
这样,通过虚拟函数和消息映射, 类提供了丰富的编程接口。程序员继承基类的同时,把自己实现
的虚拟函数和消息处理函数嵌入 的编程框架。 编程框架将在适当的时候、适当的地方来调用程
序的代码。本书将充分的展示 调用虚拟函数和消息处理函数的内幕,让读者对 的编程接口有清
晰的理解。
4. MFC 的宏观框架体系
如前所述, 实现了对应用程序概念的封装,把类、类的继承、动态约束、类的关系和相互作用等封
装起来。这样封装的结果对程序员来说,是一套开发模板(或者说模式)。针对不同的应用和目的,程序
员采用不同的模板。例如,+ 应用程序的模板,+ 应用程序的模板,规则 应用程序的模板,扩
展 应用程序的模板,"#02+#5 应用程序的模板,等等。
这些模板都采用了以文档/视为中心的思想,每一个模板都包含一组特定的类。典型的 + 应用程序的构
成将在下一节具体讨论。
为了支持对应用程序概念的封装, 内部必须作大量的工作。例如,为了实现消息映射机制, 编
程框架必须要保证首先得到消息,然后按既定的方法进行处理。又如,为了实现对 编程的支持和多
线程编程的支持, 内部使用了特别的处理方法,使用模块状态、线程状态等来管理一些重要信息。
虽然,这些内部处理对程序员来说是透明的,但是,懂得和理解 内部机制有助于写出功能灵活而强
大的程序。
总之, 封装了 !*+,"#*+,"$*+ 等底层函数的功能,并提供更高一层的接口,简
化了 编程。同时, 支持对底层 *+ 的直接调用。
提供了一个 应用程序开发模式,对程序的控制主要是由 框架完成的,而且 也
完成了大部分的功能,预定义或实现了许多事件和消息处理,等等。框架或者由其本身处理事件,不依赖
程序员的代码;或者调用程序员的代码来处理应用程序特定的事件。
是 类库,程序员就是通过使用、继承和扩展适当的类来实现特定的目的。例如,继承时,应用
程序特定的事件由程序员的派生类来处理,不感兴趣的由基类处理。实现这种功能的基础是 对继承
的支持,对虚拟函数的支持,以及 实现的消息映射机制。
2. MDI 应用程序的构成
本节解释一个典型的 + 应用程序的构成。
用 产生一个 + 工程 (无 "# 等支持), 创建了一系列文件,构成了一个应
用程序框架。这些文件分四类:头文件(6.),实现文件6,资源文件6,模块定义文件6',
等。
1. 构成应用程序的对象
图 %/% 解释了该应用程序的结构,箭头表示信息流向。
从
、,'、
'、+,'、
+. 类对应地派生出
2、2、2'、
,'、.,'
五个类,这五个类的实例分别是
应用程序对象、文档对象、视对
象、主框架窗口对象和文档边框窗口对象。主框架窗口包含了视窗口、工具条和状态栏。对这些类或者对
象解释如下。
(%)应用程序
应用程序类派生于 。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的
初始化、运行和结束。
(!)边框窗口
如果是 + 应用程序,从 ,' 类派生边框窗口类,边框窗口的客户子窗口+'直接包
含视窗口;如果是 + 应用程序,从 +,' 类派生边框窗口类,边框窗口的客户子窗口
+'直接包含文档边框窗口。
如果要支持工具条、状态栏,则派生的边框窗口类还要添加 2$ 和 $ 类型的成员变量,
以及在一个 "'' 消息处理函数中初始化这两个控制窗口。
边框窗口用来管理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助
(+2% 模式和打印预览)。
( )文档边框窗口
文档边框窗口类从 +. 类派生,+ 应用程序使用文档边框窗口来包含视窗口。
(1)文档
文档类从 ,' 类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文
档对象来访问和更新数据。
(7)视
视类从 ' 或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上
显示文档的内容,并把用户输入转换成对文档的操作。
(8)文档模板
文档模板类一般不需要派生。+ 应用程序使用多文档模板类 2',';+ 应用程序使用
单文档模板类 3'2','。
应用程序通过文档模板类对象来管理上述对象(应用程序对象、文档对象、主边框窗口对象、文档边框窗
口对象、视对象)的创建。
2. 构成应用程
序的对象之间的关系
这里,用图的形式可直观地表示所涉及
的 类的继承或者派生关系,如图
%/! 所示意。
图 %/! 所示的类都是从 "&' 类派生
出来的;所有处理消息的类都是从
,23' 类派生的。如果是多文档
应用程序,文档模板使用
2',',主框架窗口从
,' 派生,它包含工具条、
状态栏和文档框架窗口。文档框架窗口
从 . 派生,文档框架窗
口包含视,视从 ' 或其派生类派生。
3. 构成应用程序的文件
通过上述分析,可知 产生的 + 框架程序的内容,所定义和实现的类。下面,从文件的角度
来考察 生成了哪些源码文件,这些文件的作用是什么。表 %/% 列出了 所生成的
头文件,表 %/! 列出了了 所生成的实现文件及其对头文件的包含关系。
表 1-1 AppWizard 所生成的头文件
头文件 用途
96.
标准 5 头文件
''6.
定义了各种资源 +
6. :';''6.;
定义了从 派生的应用程序对象 2
.,6.
定义了从 +. 派生的文档框架窗口对象 2.,'
,,6.
定义了从 +,' 派生的框架窗口对象 ,'
6.
定义了从 ,' 派生的文档对象 2
<'6.
定义了从 ' 派生的视图对象 2'
表 1-2 AppWizard 所生成的实现文件
实现文件 所包含的头文件 实现的内容和功能
96 :';96.;
用来产生预编译的类型信
息。
6 :';96.;
:';6.;
:';,6.;
:';.,6.;
:';6.;
:';<'6.;
定义 2 的实现,并
定义 2 类型的全局
变量 .'。
.,6 :';96.;
:';6.;
:'=.,6.4
实现了类 .,'
.,6 :';96.;
:';6.;
:';.,6.;
实现了类 ,'
6 :';96.;
:';6.;
:';6.;
实现了类 2
<'6 :';96.;
:';6.;
:';6.;
:';<'6.;
实现了类 2<'
从表 %/! 中的包含关系一栏可以看出:
2的实现用到所有的用户定义对象,包含了他们的定义;'的实现用到 2;其他对象的
实现只涉及自己的定义;
当然,如果增加其他操作,引用其他对象,则要包含相应的类的定义文件。
对预编译头文件说明如下:
所谓头文件预编译,就是把一个工程*&'中使用的一些 标准头文件如
6(、96(预先编译,以后该工程编译时,不再编译这部分头文件,仅仅使用预编译的结
果。这样可以加快编译速度,节省时间。
预编译头文件通过编译 96 生成,以工程名命名,由于预编译的头文件的后缀是“.4,所以编
译结果文件是 &','6.。
编译器通过一个头文件 96. 来使用预编译头文件。96. 这个头文件名是可以在 &' 的编译
设置里指定的。编译器认为,所有在指令:';96.;前的代码都是预编译的,它跳过
:';96.;指令,使用 &','6. 编译这条指令之后的所有代码。
因此,所有的 ** 实现文件第一条语句都是::';96.;。
另外,每一个实现文件 ** 都包含了如下语句:
:'-#$>?
:'2(+-+#
.$#-"#2(+-+#@AB--+#--C
:'
这是表示,如果生成调试版本,要指示当前文件的名称。--+#--是一个宏,在编译器编译过程中给它赋
值为当前正在编译的文件名称。
MFC 和 Win32
1. MFC Object 和 Windows Object 的关系
中最重要的封装是对 !*+ 的封装,因此,理解 "&' 和 "&'对
象,一个 类的实例之间的关系是理解 的关键之一。所谓 "&'( 对
象)是 ! 下用句柄表示的 操作系统对象;所谓 "&' 对象是 对象,
是一个 类的实例,这里(本书范围内)"&' 是有特定含义的,指封装 "&' 的
"&',并非指任意的 "&'。
"&'和 "&' 是不一样的,但两者紧密联系。以窗口对象为例:
一个 窗口对象是一个 类
(或派生类)的实例,是程序直接创建的。
在程序执行中它随着窗口类构造函数的调用
而生成,随着析构函数的调用而消失。而
窗口则是 系统的一个内部数据结构的实例,由一个“窗口句柄”标识, 系统
创建它并给它分配系统资源。 窗口在 窗口对象创建之后,由 类的 '' 成员函
数创建,“窗口句柄”保存在窗口对象的 ,-. 成员变量中。 窗口可以被一个程序销毁,也可
剩余63页未读,继续阅读
留壹刀
- 粉丝: 0
- 资源: 10
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
- SPC统计方法基础知识.pptx
- MW全能培训汽轮机调节保安系统PPT教学课件.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0