VC MFC 编程实例2.pdf

上传人:qwe****56 文档编号:70023361 上传时间:2023-01-14 格式:PDF 页数:9 大小:22.49KB
返回 下载 相关 举报
VC MFC 编程实例2.pdf_第1页
第1页 / 共9页
VC MFC 编程实例2.pdf_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《VC MFC 编程实例2.pdf》由会员分享,可在线阅读,更多相关《VC MFC 编程实例2.pdf(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 本文由s d h e x u 贡献 p d f 1。下载 下载 第2章 类 到目前为止,我们只讨论了 M F C的C W n d 类.在本章中,我们将讨论 M F C提供的其他重 要的类,这些类可以分成以下几种:访问用户界面的类,包括 CWn d.帮助绘图的类.提供运行一个应用程序所需功能的类.处理数组和数据列表的类.访问数据库的类.维护文件的类.允许应用程序在网上或 In t e r n e t 上通信的类.一些用来帮助同步和调试应用程序的混合类.本章的目标不是成为 M F C参考指南,而是综合论述 M F C所能提供的功能.对于任何在本 章中没有讨论的类,或有关某一特定的类的详细描述,请

2、参考有关 MFC文献.大部分OLE类没有在本章中论及,因为它们不在本书的讨论范围.2.1 基类 大多数 M F C 类是从三个基类(Ba s e Cl a s s )派生的:C O b j e c t,C C m d Ta r g e t 和C W n d.C C m d Ta r g e t 派生于 C O b j e c t 类,而 C W n d 于C C m d Ta r g e t 类.从C O b j e c t 派生的类,具有在运行 时获得对象大小和名字的能力;从 C C m d Ta r g e t 派生的类,能够处理命令消息;从 C W n d 派生 的类,能控制它们自己的窗

3、口.2.1.1 COb j e c t C O b j e c t 类本身提供的功能较少,主要工作由六个伴生宏(c o m p a n i o n m a c r o s )完成.C O b j e c t 和这些宏一起,允许 C O b j e c t 的派生类在运行时获取类名和对象大小,创建一个类对 象而不必知道类名,以及允许从文件设备中存取一个类的实例而不必知道类名.下面的宏允许类的一个实例在运行时知道它的类名和对象大小:DECLARE_DYNAMIC(CYo u r Cl a s s)/i n t h e .h f i l e IMPLEMENT_DYNAMIC(CYou r Cl a

4、 s s,CYo u r Ba s e Cl a s s)/i n t h e .c p p f i l e 可以用COb j e c t:Ge t Ru n t i m e Cl a s s ()获得运行时使用这些宏的类的详情.下面这些宏包括了前面两个宏的功能,但是允许在不知道类名的情况下创建一个类的实 例.DECLARE_DYNCREATE(CYo u r Cl a s s)/i n t h e .h f i l e IMPLEMENT_DYNCREATE(CYo u r Cl a s s,CYo u r Ba s e Cl a s s)/i n t h e .c p p f i l e

5、在不知道类名的情况下,可以用 CRu n t i m e Cl a s s:Cr e a t e Ob j e c t ()创建一个运用这些宏的类 的实例.下载 例存到磁盘上.第2章 类 19 下面这些宏包括了前面所有宏的功能,但还允许在不知道类名的情况下,把一个类的实 DECLARE_SERIAL(CYo u r Cl a s s)/i n t h e .h f i l e IMPLEMENT_SERIAL(CYo u rCl a s s,CYo u r Ba s e Cl a s s,s c h e m a)/i n t h e .c p p f i l e 有关使用最后两个宏的例子,参见

6、例 70.2.1.2 CCm d Ta r g e t 由C C m d Ta r g e t 派生的类,可以接收和处理来自应用程序菜单或工具栏的命令消息.有关 CCm d Ta r ge t 类的详细的讨论将在第 3章中进行.2.1.3 CWn d 这在第1章中已讨论过,C W n d 的成员函数封装了 Wi n d o w s API中负责维护和创建窗口的 函数.CWn d 是从CCm d Ta r g e t 派生的,因此,也能接收和处理命令消息.注意 在本章中,用下面的字母标明MFC类是从前述的基类中哪一个派生的.O表示该类是从COb j e c t 派生的.O/C表示该类是从COb

7、j e c t 和CCm d Ta r g e t 派生的.O/C/W表示该类是从COb j e c t,CCm d Ta r g e t 和CWn d 派生的.2.2 应用程序,框架,文档和视图类 使用De v e l o p e r St u d i o 的Ap p Wi z a r d(应用程序向导)创建 MFC应用程序时,应用程p a g e 1序从四个 基类派生:CWi n Ap p 是应用程序的应用程序类,负责初始化和运行应用程序.CFr a m e Wn d 是应用程序的框架类,负责显示和搜寻用户命令.CDo c u m e n t 是应用程序的文档类,负责装载和维护文档.文档可

8、以是从文档到网络 设备设置的任何内容.Cv i e w 是应用程序的视图类,负责为文档提供一个或多个视图.注意 在本书中,我们将用应用程序类,框架类等术语表示从这四个基类派生的类.根据所建的应用程序类型,应用程序中 Ap p Wi z a r d 包含相应的基类.对话框应用程序 用户界面只有一个对话框,没有框架类,文档类或视图类.对话框应用 程序只用应用程序类的派生类 CWi n Ap p.对话框用MFC的CDi a l o g 类创建,这将在随后部 分讨论.单文档界面应用程序 能在某个时间内装入和编辑一个文档,使用了前面提及的所有四个 基类.多文档界面应用程序 一次可以装载和编辑多个文档,并

9、且不但使用了所有四个基类,还使用了CFr a m e Wn d 的两个派生类,即 CMDIFr a m e Wn d 和CMDICh i l d Wn d.C D o c u m e n t 和CVi ew 类的派生类负责第1章中描述的文档/视图.使用A p p Wi z a r d 的一个例 子,参见例 2.20 第一部分 基 础 知 识 下载 2.2.1 CWi n Ap p(O/C/W)应用程序类 C Wi n A P P(O/C/W)是应用程序开始后创建的第一个对象,并且是在结束前最 后一个执行的对象.起动时,应用程序类负责创建应用程序的其余对象.对于一个对话框应用程序,应用程序类应用

10、 CDi a l o g 创建一个对话框.对于一个 S D I应用程序,应用程序类创建一个或多个文档模板(见下面的讨论),然后用 模板打开一个空文档.对于一个 M D I应用程序,在主框架类中,应用程序类创建一个或多个文档模板,然后 用模板打开一个空文档.在下一章中还将看到,应用程序类也同操作系统交互,作为中继,将鼠标信息和键盘输 入传给应用程序的其余部分.应用程序类是由 C Wi n A p p 派生的,并且,A p p Wi z a r d 以C X x x A p p 形式进行命名,这里的 Xx x 是应用程序的名字.1.文档模板 应用程序打开一个文档时,文档模板定义创建什么样的框架,文

11、档和视图.要创建一个 文档模板,要么为 S D I应用程序创建一个 C S i n g l e D o c Te m p l a t e 类,要么为 M D I应用程序创建 CMu l t i Do c Te m p l a t e 类,并且用三个类的指针对它进行初始化.p Do c Te m p l a t e=n e w CMu l t i Do c Te m p l a t e (IDR_APPTYPE,RUNTIME_CLASS(CAp p Do c),RUNTIME_CLASS(CCh i l d Fr a m e),RUNTIME_CLASS(CAp p Vi e w);/Yo u

12、 r Do c u m e n t Cl a s s /Yo u r Fr a m e Cl a s s /Yo u r Vi e w Cl a s s 这里的 R U N T I M E _ C L A S S宏返回一个指向类的 C R u n t i m e C l a s s 结构的指针,该结构用 D E C L A R E _ D Y N C R E AT E和I M P L E M E N T _ D Y N C R E AT E宏填加到类中.文档模板通过用 CRu n t i m e Cl a s s:Cr e a t e Obj e c t ()函数创建一个所有三个类的实例来打开

13、一个文档.2.线程 CWi n Ap p 类自身是从 CWi n Th r e a d 派生的.CWi n Th r e a d 类封装了系统中用来创建和维护应 用程序线程的 Wi n d o w s API函数.实际上,可以通过创建 C Wi n T h r e a d 类的另一个实例实现应 用程序多任务.在应用程序中,CWi n Ap p 类代表主要的执行线程.3.CFr a m e Wn d(O/C/W)此框架类 C F r a m e W n d (O/C/W)是应用程序运行时创建的第二个对象,负责显示和监督用 户对应用程序其余部分的命令.对于一个 S D I 应用程序,框架类是从 C

14、 F r a m e W n d 派生的,A p p Wi z a r d 自动命名为:CMa i n Fr a m e.对于一个 M D I 应用程序,框架类派生于 C M D I F r a m e W n d ,A p p Wi z a r d 自动命名为 C M a i n F r a m e.在 M D I应用程序中,每个打开的文档有一个子框架类,每个子框架类是从 CMDICh i l d Wn d 派生的.Ap p Wi z a r d 自动指定子框架类名为 CCh i l d Fr m.对于一个对话框应用程序来说,没有框架类.在前面已提过,一个对话框应用程序是由 一个应用程序类和

15、一个对话框类组成的.4.CDo c u m e n t (O/C)通常,文档类 C D o c u m e n t (O/C)是应用程序打开一个新文档或一个已存在的文档时创建的p a g e 2 下载 第2章 类 21 对象.文档类负责将一个文档赋给它的成员变量,并允许视图类编辑这些成员变量.一个文 档包括从图形文件到可编程控制的任何内容.文档类派生于 C D o c u m n t,A p p Wi z a r d 自动命名 为CXx x Do c,Xx x 是应用程序名.2.2.2 CVi e w (O/C/W)在创建文档类的一个实例之后将创建视图类 CWi e w(O/C/W)的一个实例

16、.视图类负责描述 文档类的内容,它也可以允许用户编辑文档.窗口分区类,即 CSp l i t t e r Wn d,允许文档有多视图;这些视图以由相同视图类的一些实例 创建,也可以由完全不同的视图类实例创建.A p p Wi z a r d 允许视图类从几个基类(包括 C Tr e e Vi e w,C E d i t Vi e w,C R i c h E d i t Vi e w,C L i s t Vi e w 等)之一派生,每一个基类赋予应用程序不同的功能集.有关这些类的更多例子参 见例 1.所有这些类都派生于 C Vi e w 类,不管选择哪个基类,A p p Wi z a r d 自

17、动命名派生类为 CXx x Vi e w,这里的Xx x 是应用程序名.前面已提及,可以从四个基类创建三种类型的应用程序:对话框,单文档,多文档.下 面我们将详细讨论这些应用程序类型.1.对话框应用程序 对话框应用程序是由一个派生于 C Wi n A p p 的应用程序类,和用派生于 CDi a l o g 类创建的对 话框构成的(见图2-1).应用程序类 对话框类 系统创建应用程序 应用程序类创建对 话框类的实例 类的实例 对话框类创建其他控件类,这些 没有创建框架,文档或视图类 类一起创建了屏幕上的窗口.图2-1 一个对话框应用程序由一个应用程序类和一个对话框类创建 2.单文档界面应用程序

18、 单文档界面应用程序包括以下类:从 C Wi n A p p 派生的应用程序类,从 C F r a m e W n d 派生的 框架类,从 C D o c u m e n t 派生的文档类,以及每个文档一个或多个视图类,这些视图类是从一 些派生于CVi e w 的视图类派生的(见图2-2).3.多文档界面应用程序 多文档界面(M D I)应用程序包括以下类:派生于 C Wi n A p p 的应用程序类,派生于 C M D I F r a m e W n d 的框架类,派生于 C M D I C h i l d W n d 的一个或多个子框架类,派生于 CDo c u m e n t 的每个子

19、框架一个文档类和派生于 CVi e w 的每个文档一个或多个视图类(见图2-3).4.应该选择哪一种应用程序类型 对话框应用程序一般在用户交互要求有限的情况下使用.然而就个人而言,宁愿使用一 个带窗体视图(C F o r m Vi e w )的S D I应用程序,而不愿意使用一个对话框应用程序,这样既利用 了创建对话框应用程序的简单性,又具备了单文档应用程序的文档特性.22 第一部分 基 础 知 识 下载 文档类 应用程序类 文档模板类 框架类 框架和视图类在屏 幕上显示窗口 系统创建应 用程序类的 实例 应用程序类创建一个 文档模板,并告知它 装入一个空的文档类 视图类 接着,文档模板类 创

20、建文档,框架和 视图类的一个实例 图2-2 一个SDI应用程序由应用程序,框架,文档和视图类创建 文档类 文档模板类 应用程序类 子框架类 框架类 系统创建应用 程序类的一个 实例 应用程序创建文档模 板和框架类的一个实 例,然后告知文档类 装入一个新的空文档 框架,子框架和视图 类在屏幕上创建窗口 视图类 文档模板创建文档,子框架和视图类的一 个实例 图2-3 一个MDI应用程序由应用程序,框架,子框架,文档和视图类创建 什么时候应该使用 M D I应用程序,而不是 S D I应用程序呢?如果在运行期间应用程序只与 一个文档有关连,那么就使用 SDI方法.但是,如果应用程序能产生多个文档,并

21、对多个文档 进行处理(即使这不是一次性完成的),这时应该采取 MDI的方法,p a g e 3即使在开始时并没有看到在 同一时间修改多个文档的可能.一个 MDI应用程序并不比一个 SDI应用程序复杂多少,却可以 带给用户在同一时间看阅多个文档的方便.2.3 其他用户界面类 除了框架和视图类外,MFC还提供了许多其他支持用户界面的类.控件窗口类 封装了通用控件.菜单类 处理菜单,就如 CWn d 类处理窗口一样.下载 对话框类 封装了对话框和通用对话(Co m m o n Di a l o g)框.控制条类 封装了控制条(工具栏,对话条和状态栏).属性类 封装了属性表(Pr o p e r t

22、y Sh e e t)和属性页(Pro p e r t y Pa g e).2.3.1 通用控件类 第2章 类 23 通用控件类(O/C/W)封装了通用控件(如按钮,列表框等)的功能.这些类派生于 C W n d,继承了诸如 S h o w Wi n d o w ()和M o v e Wi n d o w ()之类的窗口成员函数.当这些类创建窗口时,它们使用一个通用控件窗口类.例如,用 B U T TO N窗口类创建真实的窗口:Cr e a t e (_T(BUTTON),l p s z Ca p t i o n,d w St y l e,r e c t,p Pa r e n t Wn d,n

23、 ID);C B u t t o n 通用控件类创建一个按钮时,它就用 下面表中列出了通用控件类,它们创建的控件,以及它们使用的窗口类.通用控件MFC类和它们的窗口类 MFC类 CAn i m a t e Ct r l (O/C/W)CBu t t o n(O/C/W)CCo m b o Bo x(O/C/W)CEd i t(O/C/W)CHe a d e r Ct r l(O/C/W)CLi s t Bo x(O/C/W)CLi s t Ct r l(O/C/W)CPr o g r e s s Ct r l(O/C/W)CSc r o l l Ba r(O/C/W)CSl i d e r C

24、t r l(O/C/W)CSp i n Bu t t o n Ct r l(O/C/W)CSt a t i c(O/C/W)CTr e e Ct r l(O/C/W)CTa b Ct r l(O/C/W)CDa t e Ti m e Ct r l(O/C/W)CMo n t h Ca l Ct r l(O/C/W)CHo t Ke y Ct r l(O/C/W)CTo o l Ti p Ct r l(O/C/W)通用控件 动画控件 按钮控件 组合框控件 编辑控件 标题控件 列表框控件 列表控件 进度指示控件 滚动条控件 滑块控件 微调按钮控件 静态文本控件 树型控件 标签控件 日期/时间控件

25、月历控件 热键控件 工具提示控件 窗 口 类 Sy s An i m a t e 32 BUTTON COMBOBOX EDIT Sy s He a d e r 32 LISTBOX Sy s Li s t Vi e w 32 m s c t l s _p r o g r e s s 32 SCROLLBAR m s c t l s _t r a c k b a r 32 m s c t l s _u p d o w n 32 STATIC Sy s Tr e e Vi e w 32 Sy s Ta b Co n t r o l 32 Sy s Da t e Ti m e Pi c k 32

26、Sy s Mo n t h Cal 32 m s c t l s _h o t k e y 32 t o o l t i p s _c l a s s 32 不是所有的通用控件类都简单地封装一个通用控件窗口类.事实上,有三个 M F C类提供 了通用控件中没有的功能.下面的表格列出了这些类,它们派生的 M F C类和它们所提供的额 外功能.派生的MFC类和它们的 MFC基类 MFC类 CBi t m a p Bu t t o n CCh e c k Li s t Bo x CDr a g Li s t Bo x 所派生的MFC类 CBu t t o n CLi s t Bo x CLi s t

27、 Bo x 增加的功能 更好地支持按钮上的位图 列表框中的复选框 列表框中用户可拖拉的工程 2.3.2 菜单类 菜单类封装了 Wi n d o w s API 中用来创建和维护菜单的函数.C M e n u 还有两个成员函数 24 一样.第一部分 基 础 知 识 下载 At t a c h ()和De t a c h (),允许封装一个已建的菜单,如同 C W n d 对象能够封装一个已有的窗口 2.3.3 对话框类 C D i a l o g 类封装了用来创建对话框的 Wi n d o w s API.对话框是弹出式窗口,在创建时可以 用对话框模板中定义的控件窗口来填充.通用对话框 MFC类

28、 M F C还有六个类封装了 Wi n d o w s API用来创建通用对话框的函数.通用对话框是一些随 控件预先装入的用于提示用户输入一些常用信息的对话框,如装入或存储的文件名,颜色,字体和打印参数.通用对话框不但为用户提供了一个熟悉的对话框,而且节省了书写这些对 话的工作量.下面的表格显示了通用对话框的目的,提供它们的 Wi n d o w s APIs 和封装这些 Wi n d o w s APIs 的MFC通用对话框类.p a g e 4 通用对话框 MFC类及其用途:通用对话框 选择颜色 打开/保存文件 查找或替换文本 选择字体 设置打印页 打印 Wi n d o w s API调

29、用:Ch o o s e Co l o r():Ge t Op e n Fi l e Na m e():Ge t Sa v e Fi l e Na m e():Fi n d Te x t():Re p l a c e Te x t():Ch o o s e Fo n t():Pa g e Se t u p Dl g():Pr i n t Dl g()CFo n t Di a l o g CPa g e Se t u p Di a l o g CPr i n t Di a l o g CFi n d Re p l a c e Di a l o g MFC类 CCo lo r Di a l o g

30、 CFi l e Di a l o g 2.3.4 控制条类 控制条类(O/C/W)封装了为应用程序提供工具栏,状态栏,对话条和 r e b a r 的Wi n d o w s API 函数.C To o l Ba r (O/C/W)和 C To o l Ba r Ct r l (O/C/W)类 帮 助 创 建 和 维 护 一 个 工 具 栏.C To o l B a r C t r l 类封装了系统提供的窗口类 To o l b a r Wi n d o w 3 2的功能,并由该类来做实际 的工具栏的创建和维护工作.而 C To o l B a r 类就是通常的 M F C.C To o l

31、 B a r 能提供比 CTo o l Ba r Ct r l 更多的功能,但必须以开销更多的内存为代价.CSt a t u s Ba r (O/C/W)和CSt a t u s Ba r Ct r l (O/C/W)类创建和维护状态栏.C S t a t u s B a r C t r l 类 封装了系统提供的窗口类 m s c t l s-s t a t u s b a r 32,并由该类来做实际的状态栏的创建和维护 工作.而CSt a t u s Ba r 类就是通常的MFC.St a t u s Ba r 能提供比CSt a t u s Ba r Ct r l更多的功能,C 但必须以开

32、销更多的内存为代价来支持它.CDi a l o g Ba r (O/C/W)类创建和维护对话条.一个对话条是对话框和工具栏的混和产物,它显示一个对话框模板,但却象一个工具栏一样浮动并停靠在主框架窗口中.CRe b a r (O/C/W)和CRe b a r Ct r l (O/C/W)类创建和维护Re b a r.Re b a r 是窗口控件,可以包 含一个工具栏,一个对话条和任何其他子窗口.它们提供了一个移动条(g r a b b e r b a r)(左 边双线),使它们更易于被移动,也更易于在他们的背景上画一幅位图.C R e B a r C t r l 类 下载 第2章 类 25 封装

33、了由系统提供的 Wi n d o w 类R e B a r Wi n d o w 3 2的功能,并由该类做实际的 R e B a r 创建 和维护工作.换个角度说,CRe Ba r 类就是通常的 MFC.CRe Bar 提供比CRe Ba r Ct r l 更多 的功能,但以开销更多的内存为代价.2.3.5 属性类 属性类封装了 Wi n d o w s API中用来为应用程序提供属性页和属性表的函数.一个或多个属 性页出现在属性表中,以创建 Wi n d o w s 用户熟悉的t a b b e d 视图.该视图通常用来选择程序选项.CPr o p e r t y Sh e e t(O/C/

34、W)类创建一个属性表,尽管 CPr o p e r t y Sh e e t 不是从CDi a l og 派生的,但它们非常相似.CPr o p e r t y Pa g e(O/C/W/CDi a l o g)类创建一个属性类,该类是从 CDi a l o g 派生的.关于属性表和属性页的例子,参见例 8.2.4 绘图类 2.4.1 设备环境类 C D C(0)类封装了 Wi n d o w s API 中用来画图的函数.该类也维护设备环境(De v i c e Co n t e x t),设备环境是内存中的一个对象,包含用来绘制的设备的所有特征.这些特征包括 设备的最大尺寸和发生作用的方式

35、,设备可以是屏幕或打印机.有关设备环境和 C D C类的成 员函数的更详细的讨论,请参看第 4章.有四个类是从CDC类派生的,并提供了额外功能.CCl i e n t DC 用来方便地创建和破坏一个设备环境,CCl i e n t DC通常在堆栈中创建.它的 构造函数通过调用 C D C:G e t D C()为窗口的客户区创建一个设备环境.当例程返回时,C C l i e n tp a g e 5 D C的析构函数通过调用 CDC:Re l e a s e DC()销毁该设备.既不麻烦也不复杂,更不会 因忘记释放设备环境而导致资源泄漏.CWi n d o w DC 类维护窗口的非客户区,如

36、CCl i en t DC维护客户区一样.CPa i n t DC 在被构造以获得设备环境时调用 CWn d:Be g i n Pa i n t().在这种情况下,设备 环境只允许在已被无效化的窗口客户区绘图,而不能在整个客户区绘图.析构时,C P a i n t D C 类调用CWn d:En d Pa i n t ().CMe t a Fi l e DC 创建一个 M i c r o s o f t 元文件,元文件是一个磁盘文件,它包含绘制一幅图 形时所必需的全部绘图行为和模型.可以通过打开一个元文件设备环境创建一个元文件,然 后用画图工具对它进行绘制,就当它是一个屏幕或打印机设备一样.产

37、生的文件可以在未来 的某个时刻被再次读进,以创建其他设备之一的图像.想更多地了解元文件,参见第 4章.2.4.2 图形对象类 设备环境不足以包含绘图功能所需的所有绘图特征,除了设备环境外,Wi n d o w s 还有其 他一些图形对象用来储存绘图特征.这些附加的功能包括从画线的宽度和颜色到画文本时所 用的字体.图形对象类封装了所有六个图形对象.下面的表格列出了 MFC类,它封装的图形对象,以及存储在对象中的绘图特征.26 MFC 类 CBi t m a p CBr u s h CFo n t CPa l e t t e CPe n CRg n 第一部分 基 础 知 识 下载 图形对象目的 内

38、存中的位图 画刷特性 填充某个图形时所使用的颜色和模式 字体特性 写文本时所使用的字体 调色板颜色 画笔特性 画轮廓时所使用的线的粗细 区域特性 包括定义它的点 图形对象类和它们封装的句柄 图形对象句柄 HBITMAP HBRUSH HFONT HPALETTE HPEN HRGN 2.5 文件类 CFi l e ()类封装了创建和维护平面文件的 Wi n d o w s API,三个从CFi l e 派生的MFC类提供附 加功能:CMe m Fi l e 参见例65.CSh a r e d Fi l e CSt d i o Fi l e 参见例64.还有一个感兴趣的文件类是 CFi l e

39、Fi n d (0),用它来定位磁盘上的本地文件.C F i l e F i n d 类 是另外两个类,C F t p F i l e F i n d 和C G o p h e r F i l e F i n d 类的基类,这两个类用来帮助在 I n t e r n e t 上定 位文件.这两个类将在本章后面讨论.CAr c h i v e 和串行化 在一个称为串行化的过程中,C A r c h i v e 类用C F i l e 类将文档的类对象保存到磁盘上.应用 串行化,可以将类的成员变量和全部类对象依次保存到一个存档设备上,以便它们能以完 全相同的次序被恢复.有关串行化的一些例子参见第

40、13章.与C M e m F i l e 类似,但 C S h a r e d F i l e 配置在全局堆上,这使得能用剪贴板和 允许对以回车控制符和换行符结束的文本串进行读写.有关使用 C S t d i o F i l e DDE对它进行共享.有关共享内存文件的例子参见例 76.允许不在磁盘而在内存里创建文件.当构造一个 CMe m Cl a s s 对象时,文件即 被打开,并能用它的成员函数对它进行读写,就象一个磁盘文件一样.有关内存文件的例子 2.6 数据库类 MFC库具有支持两种类型数据库的类:开放数据库连接(ODBC)数据访问对象(DAO)封装了大多数数据库厂商支持的 ODBC

41、API.如果应用程序使 用了MFC的ODBC类,它就可以支持任何支持 ODBC标准的数据库管理系统(DBMS).支持一个更新的数据库 A P I,这已被 Mi c r o s o f t Je t 数据库引擎有效 利用.也可以通过 Je t 引擎访问符合ODBC的数据库系统和其他数据源.2.6.1 ODBC类 三个主要的 ODBC类:CDa t a b a s e (0)用ODBC API打开一个DBMS数据库.构造一个 CDa t a b a s e 对象后,可以 用它的Op e n Ex ()成员函数创建与数据库的连接.调用 CDa t a b a s e 成员函数Cl o s e ()结

42、束连接.CRe co r d s e t 通过数据连接来保存和检索记录.下载 CDBVa r i a n t 代表一个记录集中的一列,而不必考虑数据类型.想更多了解访问 ODBC数据,参见例72.2.6.2 DAO类 DAO类包括与ODBC类相似的三个类:CDa o Da t a b a s e(0)打开一个DAO数据库.CDa o Re c o r d Se t (0)容纳记录.COl e Va r i a n t 代表记录列.DAO还包括另外三个类:第2章 类 27p a g e 6 CDa o Wo r k Sp a c e (0)管理数据库会话,允许事务被处理(存储到数据库)或取消操作

43、(恢复).CDa o Qu e r y De f (0)代表一个查询定义.CDa o Ta b l e De f (0)代表一个包括域和索引结构的表定义.想更多了解访问一个 DAO数据库,参见例 73.2.7 数据集类 数据集类维护和支持数组,列表和数据对象映像.CAr r a y 该类及其派生类支持数据对象数组.一个数组由一个或多个相同的数据对象组 成(如整数,类等),它们在内存中相邻,可以通过简单索引访问它们.C A r r a y 类可以动态增 加或减少数组大小.有一些派生 C A r r a y 的类(如C B y t e A r r a y,C D Wo r d A r r a y

44、等),允许创建一 个类型安全(t y p e -s a f e )的数组.然而,还有一个 CAr r a y 模板类允许使任何数 组类型安全.CLi s t 该类及其派生类支持数据对象的链接表.一个链接表由一个或多个相同的数据对 象组成(如整型,类等),它们在内存中不连续,但数据对象是双向连接的,以便于通过链表前 后搜索数据.有些 C L i s t 的派生类(如C P t r L i s t,C O b L i s t 等),允许创建一个类型安全的列表.然而,还有一个 Cl i s t 模板类使CLi s t 对任何类型都是类型安全的.CMa p 该类及其派生类支持数据对象的字典.在一个二进

45、制或文本关键字约束下,数据 字典存储一个或多个相同数据对象(如整型,类等),可以用该关键字检索数据项.举例来说,因为Wi n d o w s 不跟踪哪个MFC CWn d 对象属于哪个窗口,所以应用程序使用 CMa p 对象将窗口 句柄与它们的 C W n d 对象关联.有些 C M a p 的派生类(如CMa p Wo r d To Pt r,COb To St r i n g 等),允 许创建一个类型安全的字典.不过,还有一个 CMa p 模板类,允许创建任何类型安全的映像.有关上述每个类的例子,参见例 78,例79和例80.2.8 其他数据类 MFC库还包括其他一些数据类:C Ti m

46、e 和C Ti m e S p a n 类具有这样的成员函数,它们既可以读入,又可以格式化 t i m e _ t 数 据类型的时间串(见例81).C O l e D a t e Ti m e 和C O l e D a t e S p a n 类具有这样的成员函数,它们既可以读入,又可以格式 28 第一部分 基 础 知 识 下载 化OLE DATE数据类型的时间和日期串(见例81).CTi m e 或COl e Da t e Ti m e 应该使用哪一个,CTi m e 还是COl e Da t e Ti m e?这取决于想要达到的流行程度.CTi m e 支 持的t i m e_t 数据类型

47、易于存储和传输,因为它仅仅是个 32位整型数.然而,CTi m e 却没 有COl e Dat e Ti m e 所具有的那么好的函数,如 获得一年中的某一天.当然t i m e _t 数据 类型在21世纪将有Y2K问题(2000年问题),因为它表示自1/1/70所经历的秒数.Co l e Cu r r e n c y 类具有读入和格式化 OLE CURRENCY数据类型的成员函数.CSt r i ng 类具有操纵文本串的成员函数,CSt r i n g 操纵的数据类型为 TCHAR.CPo i n t 类提供了操纵POINT结构的成员函数,该结构定义了一个点的 X和Y坐标.CSi z e 类

48、提供了操纵SIZE结构的成员函数,该结构定义了尺寸的宽和高.CRe c t 类提供了操纵RECT结构的成员函数,该结构定义了矩形的四个点.2.9 通信类 MFC库包含了一些允许应用程序与网络或因特网(In t e r n e t)进行通信的类.1.网络类(Ne t w o r k Cl a s s e s)CASy n c So c k e t (0)允许应用程序通过网络与其他应用程序进行通信.C A S y n c S o c k e t 封装 了Wi n d o w So c k e t API,Wi n d o w So c k e t API是基于伯克利的 Ca l i f o r n

49、 i a 大学的BSD(伯克利软件 发行中心)的UNIX So c k e t 实现.CASy n c So c k e t 能存取网络通信中的位和字节.C S o c k e t 是从C A S y n c S o c k e t 派生的类,它允许在网络上发送和接收文件而不必考虑细节 问题.可以创建一个 C S o c k e t F i l e 对象,并将它与 C S o c k e t 关联;然后创建一个 C A r c h i v e 对象,并与C S o c k e t F i l e 对象关联.此时发送一个文件只是在网络上将它串行化的问题.2.因特网类 MFC有两组因特网类(In

50、t e r n e t Cl a s s e s):一组p a g e 7允许应用程序成为一个客户(如We b 浏览器),而另一组用来增强 In t e r n e t HTTP服务器软件功能(如We b 站点).3.客户类 MFC的因特网客户类(Cl i e n t Cl a s s e s)封装了Wi n 32 In t e r n e t Ex t e n s i o n s (Wi n In e t),允许用 C+语言利用四种协议之一对因特网进行访问,这四种协议为:文件传输协议(F T P),超文本 传输协议(HTTP),g o p h er 和文件:CIn t e r n e t S

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁