MFC.docx

上传人:b****7 文档编号:9083616 上传时间:2023-02-03 格式:DOCX 页数:11 大小:30.73KB
下载 相关 举报
MFC.docx_第1页
第1页 / 共11页
MFC.docx_第2页
第2页 / 共11页
MFC.docx_第3页
第3页 / 共11页
MFC.docx_第4页
第4页 / 共11页
MFC.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

MFC.docx

《MFC.docx》由会员分享,可在线阅读,更多相关《MFC.docx(11页珍藏版)》请在冰豆网上搜索。

MFC.docx

MFC

介绍

  MFC,微软基础类(MicrosoftFoundationClasses),同VCL类似,是一种ApplicationFramework,随微软VisualC++开发工具发布。

目前最新版本为9.0(截止2008年11月)。

该类库提供一组通用的可重用的类库供开发人员使用。

大部分类均从CObject直接或间接派生,只有少部分类例外。

  MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。

MFC提供了MFCAppWizard自动生成框架。

  Windows应用程序中,MFC的主包含文件为"Afxwin.h"。

  此外MFC的部分类为MFC/ATL通用,可以在Win32应用程序中单独包含并使用这些类。

  由于它的易用性,初学者常误认为VC++开发必须使用MFC。

这种想法是错误的。

作为ApplicationFramework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32程序设计。

特点

  MFC,微软基础类(MicrosoftFoundationClasses),实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎,VC++是WinDOS下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包,MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:

C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范,而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE,WS,PlatForm,这跟Pascal和Delphi的关系一个道理,Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系,Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言),MFC同BC++集成的VCL一样是一个非外挂式的软件包,类库,只不过MFC类是微软为VC++专配的..

  MFC是WinAPI与C++的结合,API,即微软提供的WinDOS下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对WinDOS下应用程序的开发,使这些被开发出来的应用程序能在WinDOS下运行,比如VB,VC++,Java,Dehpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守WinDOS作为一个操作系统的内部实现,这其实也是一种必要,微软如果不提供API,这个世上对Win编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾,上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Win下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Win下用C++&MFC编制软件时的大量内节,如应用程序实现消息的处理,设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的..

  最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建,销毁),而是一些在WinDOS(用MFC编写的程序绝大部分都在WinDOS中运行)中实现内部处理的类,如数据库的管理类等,学习中最应花费时间的是消息和设备环境,对C++和MFC的学习中最难的部分是指针,C++面向对像程序设计的其它部分,如数据类型,流程控制都不难,建议学习数据结构C++版。

  MFC是微软封装了的API。

什么意思呢?

windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用windows的接口函数API)对于程序员来说非常的困难,因为,API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。

MFC是面向对象程序设计与Applicationframework的完美结合,他将传统的API进行了分类封装,并且为你创建了程序的一般框架,

  MFC是对WindowsAPI的封装,大大简化了我们的工作;学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。

应该象背4级单词一样将这些常用类搞懂;当然不要死记,要通过看帮助、看例子、动手练习来学会它们;而且,并非每个类的内部的所有函数都要学会,要日积月累。

如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。

重要的MFC

  CWnd:

窗口,它是大多数“看得见的东西”的父类(Windows里几乎所有看得见的东西都是一个窗口,大窗口里有许多小窗口),比如视图CView、框架窗口CFrameWnd、工具条CToolBar、对话框CDialog、按钮CButton,etc;一个例外是菜单(CMenu)不是从窗口派生的。

该类很大,一开始也不必学,知道就行了。

  CDocument文档,负责内存数据与磁盘的交互。

最重要的是OnOpenDocument(读入),OnSaveDocument(写盘),Serialize(读写)

  CView视图,负责内存数据与用户的交互。

包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。

最重要的是OnDraw(重画窗口),通常用CWnd:

:

Invalidate()来启动它。

另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。

你自己的许多功能都要加在里面,你打交道最多的就是它。

  CDC设备文本。

无论是显示器还是打印机,都是画图给用户看。

这图就抽象为CDC。

CDC与其他GDI(图形设备接口)一起,完成文字和图形、图像的显示工作。

把CDC想象成一张纸,每个窗口都有一个CDC相联系,负责画窗口。

CDC有个常用子类CClientDC(窗口客户区),画图通常通过CClientDC完成。

  CDialog对话框

  CWinApp应用程序类。

似于C中的main函数,是程序执行的入口和管理者,负责程序建立、消灭,主窗口和文档模板的建立。

最常用函数InitInstance():

初始化。

  CGdiObject及子类,用于向设备文本画图。

它们都需要在使用前选进DC。

  CPen笔,画线

  CBrush刷子,填充

  CFont字体,控制文字输出的字体

  CBitmap位图

  CPalette调色板

  CRgn区域,指定一块区域可以用于做特殊处理。

  CFile文件。

最重要的不外是Open(打开),Read(读入),Write(写)

  CString字符串。

封装了C中的字符数组,非常实用。

  CPoint点,就是(x,y)对

  CRect矩形,就是(left,top,right,bottom)

CSize大小,就是(cx,cy)对(宽、高)MFC是在1992年的Microsoft16位版的C/C++编译器的7.0版本中作为一个扩展轻量级的WindowsAPI面向对象的C++封装库而引入的。

此时,C++因为它在和API方面的卓越表现,刚刚开始被用来取代C应用于开发商用软件。

因此,他们推出了替代早期的老式的字符界面的集成开发环境(IDE)的PWB。

ATL,ActiveTemplateLibrary活动模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。

通过活动模板库,可以建立COM组件,然后通过ASP页面中的脚本对COM对象进行调用。

这种COM组件可以包含属性页、对话框等等控件。

  ATL简介

  一.什么是ATL

  自从1993年Microsoft首次公布了COM技术以后,Windows平台上的开发模式发生了巨大的变化,以COM为基础的一系列软件组件化技术将Windows编程带入了组件化时代。

广大的开发人员在为COM带来的软件组件化趋势欢欣鼓舞的同时,对于COM开发技术的难度和烦琐的细节也感到极其的不便。

COM编程一度被视为一种高不可攀的技术,令人望而却步。

开发人员希望能够有一种方便快捷的COM开发工具,提高开发效率,更好地利用这项技术。

  针对这种情况,Microsoft公司在推出COMSDK以后,为简化COM编程,提高开发效率,采取了许多方案,特别是在MFC(MicrosoftFoundationClass)中加入了对COM和OLE的支持。

但是随着Internet的发展,分布式的组件技术要求COM组件能够在网络上传输,而又尽量节约宝贵的网络带宽资源。

采用MFC开发的COM组件由于种种限制不能很好地满足这种需求,因此Microsoft在1995年又推出了一种全新的COM开发工具ATL。

  ATL是ActiveXTemplateLibrary的缩写,它是一套C++模板库。

使用ATL能够快速地开发出高效、简洁的代码(EffectiveandSlimcode),同时对COM组件的开发提供最大限度的代码自动生成以及可视化支持。

为了方便使用,从MicrosoftVisualC++5.0版本开始,Microsoft把ATL集成到VisualC++开发环境中。

1998年9月推出的VisualStudio6.0集成了ATL3.0版本。

目前,ATL已经成为Microsoft标准开发工具中的一个重要成员,日益受到C++开发人员的重视。

  ATL究竟给开发人员带来了什么样的益处呢?

这还要先从ATL产生以前的COM开发方式说起。

  在ATL产生以前,开发COM组件的方法主要有两种:

一是使用COMSDK直接开发COM组件,另一种方式是通过MFC提供的COM支持来实现。

  直接使用COMSDK开发COM组件是最基本也是最灵活的方式。

通过使用Microsoft提供的开发包,我们可以直接编写COM程序。

但是,这种开发方式的难度和工作量都很大,一方面,要求开发者对于COM的技术原理具有比较深入的了解(虽然对技术本身的深刻理解对使用任何一种工具都是非常有益的,但对于COM这样一整套复杂的技术而言,在短时间内完全掌握是很难的),另一方面,直接使用COMSDK要求开发人员自己去实现COM应用的每一个细节,完成大量的重复性工作。

这样做的结果是,不仅降低了工作效率,同时也使开发人员不得不把许多精力投入到与应用需求本身无关的技术细节中。

虽然这种开发方式对于某些特殊的应用很有必要,但这种编程方式并不符合组件化程序设计方法所倡导的可重用性,因此,直接采用COMSDK不是一种理想的开发方式。

  使用MFC提供的COM支持开发COM应用可以说在使用COMSDK基础上提高了自动化程度,缩短了开发时间。

MFC采用面向对象的方式将COM的基本功能封装在若干MFC的C++类中,开发者通过继承这些类得到COM支持功能。

为了使派生类方便地获得COM对象的各种特性,MFC中有许多预定义宏,这些宏的功能主要是实现COM接口的定义和对象的注册等通常在COM对象中要用到的功能。

开发者可以使用这些宏来定制COM对象的特性。

  另外,在MFC中还提供对Automation和ActiveXControl的支持,对于这两个方面,VisualC++也提供了相应的AppWizard和ClassWizard支持,这种可视化的工具更加方便了COM应用的开发。

  MFC对COM和OLE的支持确实比手工编写COM程序有了很大的进步。

但是MFC对COM的支持是不够完善和彻底的,例如对COM接口定义的IDL语言,MFC并没有任何支持,此外对于近些年来COM和ActiveX技术的新发展MFC也没有提供灵活的支持。

这是由MFC设计的基本出发点决定的。

MFC被设计成对Windows平台编程开发的面向对象的封装,自然要涉及Windows编程的方方面面,COM作为Windows平台编程开发的一个部分也得到MFC的支持,但是MFC对COM的支持是以其全局目标为出发点的,因此对COM的支持必然要服从其全局目标。

从这个方面而言,MFC对COM的支持不能很好的满足开发者的要求。

  随着Internet技术的发展,Microsoft将ActiveX技术作为其网络战略的一个重要组成部分大力推广,然而使用MFC开发的ActiveXControl,代码冗余量大(所谓的“肥代码FatCode”),而且必须要依赖于MFC的运行时刻库才能正确地运行。

虽然MFC的运行时刻库只有部分功能与COM有关,但是由于MFC的继承实现的本质,ActiveXControl必须背负运行时刻库这个沉重的包袱。

如果采用静态连接MFC运行时刻库的方式,这将使ActiveXControl代码过于庞大,在网络上传输时将占据宝贵的网络带宽资源;如果采用动态连接MFC运行时刻库的方式,这将要求浏览器一方必须具备MFC的运行时刻库支持。

总之MFC对COM技术的支持在网络应用的环境下也显得很不灵活。

  解决上述COM开发方法中的问题正是ATL的基本目标。

  首先ATL的基本目标就是使COM应用开发尽可能地自动化,这个基本目标就决定了ATL只面向COM开发提供支持。

目标的明确使ATL对COM技术的支持达到淋漓尽致的地步。

对COM开发的任何一个环节和过程,ATL都提供支持,并将与COM开发相关的众多工具集成到一个统一的编程环境中。

对于COM/ActiveX的各种应用,ATL也都提供了完善的Wizard支持。

所有这些都极大地方便了开发者的使用,使开发者能够把注意力集中在与应用本身相关的逻辑上。

  其次,ATL因其采用了特定的基本实现技术,摆脱了大量冗余代码,使用ATL开发出来的COM应用的代码简练高效,即所谓的“SlimCode”。

ATL在实现上尽可能采用优化技术,甚至在其内部提供了所有C/C++开发的程序所必须具有的C启动代码的替代部分。

同时ATL产生的代码在运行时不需要依赖于类似MFC程序所需要的庞大的代码模块,包含在最终模块中的功能是用户认为最基本和最必须的。

这些措施使采用ATL开发的COM组件(包括ActiveXControl)可以在网络环境下实现应用的分布式组件结构。

  第三,ATL的各个版本对Microsoft的基于COM的各种新的组件技术如MTS、ASP等都有很好的支持,ATL对新技术的反应速度大大快于MFC。

ATL已经成为Microsoft支持COM应用开发的主要开发工具,因此COM技术方面的新进展在很短的时间内都会在ATL中得到反映。

这使开发者使用ATL进行COM编程可以得到直接使用COMSDK编程同样的灵活性和强大的功能。

  本文的目的就是希望在有限的篇幅中能够使读者对ATL的使用和基本原理有一个初步的了解,为广大的COM开发人员更好地使用ATL开发起到抛砖引玉的作用。

  二.ATL基本技术

  虽然使用ATL开发COM应用是一件非常简单的事情,但是在ATL简单易用的界面后面却包含着复杂的技术。

面对ATL生成的大量代码,我们即使不去深入地了解这些代码的含义也可以开发出COM应用来,但是如果我们要充分地挖掘ATL的潜力,开发出更灵活、强大的COM应用,则必须对ATL使用的基本技术有所了解。

研究ATL的实质最好的教材就是由VisualC++提供的ATL源代码。

本文这一部分只是对ATL中用到的最基本的技术进行简单的介绍。

  简单地说来,ATL中所使用的基本技术包括以下几个方面:

  COM技术

  C++模板类技术(Template)

  C++多继承技术(Multi-Inheritance)

  COM技术是理解ATL的基础,使用ATL进行开发要对COM技术的基本概念有最低限度的了解。

由于COM是一项非常复杂庞大的技术体系,限于本文的篇幅,这里不再赘述。

对于本文中提到的COM基本概念也不做过多的解释,请读者参阅有关的参考书籍。

  作为ATL最核心的实现技术的模板是对标准C++语言的扩展,但是在大多数的C++编程环境中,人们很少使用它,这是因为模板的功能虽然很强,但是它内部机制比较复杂,需要比较多的C++知识和经验才能灵活地使用它。

在MFC中的CObjectArray等功能类就是由模板来定义的。

完全通过模板来定义程序的整体类结构,ATL是迄今为止做得最为成功的。

  所谓模板类简单地说是对类的抽象。

我们知道C++语言用类定义了构造对象(这里指C++对象而不是COM对象)的方式,对象是类的实例,而模板类定义的是类的构造方式,使用模板类定义实例化的结果产生的是不同的类。

因此可以说模板类是“类的类”。

微软每推出一个重要的windows版本,一般都会同时推出一个SDK(SoftwareDevelopmentKit)。

SDK包含了开发该windows版本所需的windows函数和常数定义、API函数说明文档、相关工具和示例。

SDK一般使用C语言,但不包括编译器。

高版本VC++包括了SDK所有的头文件、帮助、示例和工具,不需要再安装SDK,低版本如VC++5.0则需要安装SDK。

从windows98开始,windowsSDK叫PlatformSDK(API函数的有关声明、例子。

  用VC编写windows程序有两种方式:

windowsc方式(SDK)和C++方式(对SDK函数进行包装,如VC中的MFC、BCB中的VCL)。

SDK编程就是直接用windowsAPI进行编程。

API由上千个API函数组成(win95中有两千多个),而MFC是API的封装,结合面向对象的继承、多态组成一个个类,共有一百多个类组成。

  SDK是SoftwareDevelopmentKit的缩写,中文意思是“软件开发工具包”。

这是一个覆盖面相当广泛的名词,可以这么说:

辅助开发某一类软件的相关文档、范例和工具的集合都可以叫做“SDK”。

开发Windows平台下的应用程序所使用的SDK只是广义SDK的一个子集。

编辑本段

与SDK相关的几个概念

  上面只是说了一个SDK大概的概念而已,要理解SDK不得不引入API、动态链接库、导入库等等概念。

  首先要接触的是“API”,也就是ApplicationProgrammingInterface,其实就是操作系统留给应用程序的一个调用接口,应用程序通过调用操作系统的API而使操作系统去执行应用程序的命令(动作)。

早在DOS时代就有API的概念,只不过那个时候的API是以中断调用的形式(INT21h)提供的,在DOS下跑的应用程序都直接或间接的通过中断调用来使用操作系统功能,比如将AH置为30h后调用INT21h就可以得到DOS操作系统的版本号。

而在Windows中,系统API是以函数调用的方式提供的。

同样是取得操作系统的版本号,在Windows中你所要做的就是调用GetVersionEx()函数。

可以这么说,DOSAPI是“Thinkingin汇编语言”的,而WindowsAPI则是“Thinkingin高级语言”的。

DOSAPI是系统程序的一部分,他们与系统一同被载入内存并且可以通过中断矢量表找到他们的入口。

  DLL即DynamicLinkLibrary(动态链接库)。

我们经常会看到一些.dll格式的文件,这些文件就是动态链接库文件,其实也是一种可执行文件格式。

跟.exe文件不同的是,.dll文件不能直接执行,他们通常由.exe在执行时装入,内含有一些资源以及可执行代码等。

其实Windows的三大模块就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),里面就含有了API函数的执行代码。

为了使用DLL中的API函数,我们必须要有API函数的声明(.H)和其导入库(.LIB)。

导入库可以理解为是为了在DLL中找到API的入口点而使用的。

  所以,为了使用API函数,我们就要有跟API所对应的.H和.LIB文件,而SDK正是提供了一整套开发Windows应用程序所需的相关文件、范例和工具的“工具包”。

  由于SDK包含了使用API的必需资料,所以人们也常把仅使用API来编写Windows应用程序的开发方式叫做“SDK编程”。

而API和SDK是开发Windows应用程序所必需的东西,所以其它编程框架和类库都是建立在它们之上的,比如VCL和MFC,虽然他们比起“SDK编程”来有着更高的抽象度,但这丝毫不妨碍它们在需要的时候随时直接调用API函数。

  时下学计算机的大多想学编程,且大部分都是在Windows下工作的,而目前学得最热门的是VC,大多数人一开始就开始学习VC,VC是以C++为语言基础的开发工具,而C++是C语言的扩充,故要学好VC最好是先学好C和C++。

  用VC编写Windows程序有两种:

1.Windowsc方式(SDK),2.C++方式:

即对SDK函数进行包装,如VC的MFC,BCB的VCL等。

SDK编程就是直接调用Windows的API进行编程,平时人们常说"用SDK写程序"就是指用Windows的API函数来写程序,API由上千个API函数组成(Win95的API有两千多个)。

而MFC是API的封闭,结合面向对象程序设计的继承性和多态性组成一个个的"类",共由一百多个类组成。

尽管MFC比SDK方便,但要深入VC,直接去学MFC却是不明智的选择。

只有在熟悉了MFC的运行机制的情况下,才有可能深入下去。

所以学VC最好是先学用SDK编写程序,在此期间掌握Windows操作系统的工作原理和各API函数的应用,然后再深入MFC。

编辑本段

编程环境

  我们仍然用VC6的IDE(集成开发环境)来编写SDK程序,启动VC6后选择File菜单的New...选项,在出现的New对话框的Projects标签内选择Win32Application,然后在ProjectsName指定项目的名字,在Location中指定路径后按OK按钮,在出现的对话框中,如果你想要用C语言来写程序可以选择Anemtpyproject,如果你想创建一个带有WinMain入口函数和普通参数的设定的项目,可以选择AsimpleWin32application,如果您想创建一个简单典型的“HelloWorld!

”Win32SDKapplication应用程序,可以选择Atypical"HelloWorld!

"application。

确定项目类型后按Finish完成。

  在VC6环境下,你依然可以使用资源编辑器和ClassWizar等工具完成程序的编写。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 幼儿教育 > 少儿英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1