第一章Visual C++概述.docx
- 文档编号:12014474
- 上传时间:2023-04-16
- 格式:DOCX
- 页数:30
- 大小:382.86KB
第一章Visual C++概述.docx
《第一章Visual C++概述.docx》由会员分享,可在线阅读,更多相关《第一章Visual C++概述.docx(30页珍藏版)》请在冰豆网上搜索。
第一章VisualC++概述
第一章VisualC++简介
只要提到在Windows95和WindowsNT下进行32位的应用程序开发,就不能不提到VisualC++。
相比其它的编程工具而言,VisualC++在提供可视化的编程方法的同时,也适用于编写直接对系统进行底层操作的程序,其生成代码的质量,也要优于其它的很多开发工具。
随VisualC++所提供的Microsoft基础类库(MicrosoftFoundationClassLibrary,简写为MFC),对Windows95/NT所用的Win32应用程序接口(Win32ApplicationProgrammingInterface)进行了十分彻底的封装,这使得可以使用完全的面向对象的方法来进行Windows95/NT应用程序的开发,从而大量的节省了应用程序的开发周期,降低了开发成本,也使得Windows程序员从大量的复杂劳动中解救出来,相信随着对VisualC++了解的逐步深入,你会亲自感受到这一点。
VisualC++使Windows编程不再深奥和晦涩,而是一件有意义并且有趣的事情,而且,你并没有因为获得这种方便而牺牲应用程序的性能。
在本章中,我们将讲述:
●VisualC++和MFC历史
●VisualC++5.0的不同版本和它们的区别
●VisualC++5.0的新特性
●VisualC++5.0集成开发环境的使用
第一节VisualC++和MFC的历史
VisualC++的核心是Microsoft基础类库,即通常所说的MFC。
尽管使用VisualC++进行编程并不一定要使用MFC,使用MFC也不一定就要使用VisualC++,BorlandC++的新版本也提供了对MFC的支持,然而事实上,在很多情况下,我们提到VisualC++时指的就是MFC,而提到MFC时指的也就是VisualC++。
因此,当你看到关于VisualC++或是MFC的资料时,要知道,在绝大多数情况下,它们都是指同一样东西。
MFC相当彻底的封装了Win32软件开发工具包(SoftwareDevelopmentKit,即通常所说的SDK)中的结构、功能,它为编程者提供了一个应用程序框架,这个应用程序框架为编程者完成了很多Windows编程中的例行性工作,如管理窗口、菜单和对话框,执行基本的输入和输出、使用集合类来保存数据对象等等,并且,MFC使得在程序中使用很多过去很专业、很复杂的编程课题,如ActiveX、OLE、本地数据库和开放式数据库互联(OpenDatabaseConnectivity,简写为ODBC)、Windows套接字和Internet应用程序设计等,以及其它的应用程序界面特性,如属性页(也叫标签对话框)、打印和打印预览、浮动的和可定制的工具条变得更加的容易。
早在1989年,Microsoft的程序员们开始试图将C++和面向对象的编程概念应用于Windows编程中,以编写出一个可以使Windows编程更加简便的应用程序框架。
他们把这个应用程序框架叫做AFX(AFX这个词来源于ApplicationFramework,但奇怪的是这个词组中并没有包含“X”这个字母)。
直到今天,AFX小组早已不存在了,AFX这个名称也于1994年初不再使用,但在VisualC++和MFC中,AFX的影子却随处可见,很多全局函数、结构和宏的标识符都被加上了AFX的前缀。
最初的AFX版本在经过一年的艰苦之后诞生,却未能被大多数Windows程序员所接受。
AFX的确是经过了精心的规划和编码,并且,它也提供了对WindowsAPI的高度抽象,建立了全新的面向对象的AFXAPI,但最要命的是AFXAPI库根本不兼容于现有的WindowsAPI。
由此导致的最严重后果是大量的SDK代码无法移植,而程序员将学习两种完全不同的编程方法。
AFX不得不重新做所有的一切,他们所创建的新的应用程序框架是一套扩展的C++类,它封装和映射了WindowsAPI,这就是MFC的前身。
过去的AFX小组也变成了MFC小组。
最终,MFC的第一个公开版本于1992年3月随MicrosoftC/C++7.0(而不是VisualC++1.0)一起推出。
那时距Windows3.1发布尚有好几个月。
在MFC1.0中还没有文档/视结构,但有类CObject和CArchive。
在12个月之后,MFC2.0随Microsoft新的编程工具VisualC++1.0一道出炉。
与MFC1.0一样,MFC2.0仍是16位的,因为32位的WindowsNT3.1直到1993年7月才问世。
在MFC2.0中,增加了对文档/视结构、OLE1.0、Windows3.1公用对话框的支持和消息映射等。
在WindowsNT3.1面世一个月以后,Microsoft推出了32版本的VisualC++和MFC2.1,它实际上是MFC2.0的Win32接口。
最后一个16位的VisualC++编译器是1993年12月推出的VisualC++1.5,直到今天,一些为Windows3.1编写16位应用程序的程序员还在使用这个版本。
1994年9月,32位的MFC3.0伴随着VisualC++2.0的一道面市,在今天的计算机图书市场上,还有着的大量的关于VisualC++2.0和MFC3.0的图书出售,因此,你可以想象得出VisualC++2.0所取得的成功和它所产生的影响。
并不象你预想的那样,在VisualC++5.0中包括的MFC版本不是MFC5.0,而是MFC4.21。
发展到今天,MFC已发展成一个稳定和涵盖极广的C++类库,为成千上万的Win32程序员所使用。
MFC库是可扩展的,它和Windows技术的最新发展到目前为止始终是同步的。
并且,MFC类库使用了标准的Windows命名约定和编码格式,所以有经验的WindowsSDK程序员很容易过渡到MFC。
MFC结合了WindowsSDK编程概念和面向对象的程序设计技术,从而具有极大灵活性和易用性。
第二节VisualC++5.0的版本及新特性
VisualC++5.0是Microsoft于1997年4月推出的最新的VisualC++编译器,它包括三个版本。
各个版本之间的区别如表1.1所示:
表1.1VisualC++5.0的不同版本
版本
特点
学习版
(LearningEdition)
除了代码优化、剖析程序(一种分析程度的运行时行为的开发工具)和到MFC库的静态链接外,VisualC++5.0学习版提供了专业版的其它所有功能。
学习版的价格要比专业版本低很多,这是为了使希望使用VisualC++5.0来学习C++语言的个人也可以负担得起。
但你不可以使用VisualC++5.0学习版来开发供发布的软件,其授权协议明确禁止这种做法。
专业版
(ProfessionalEdition)
VisualC++5.0可用来开发Win32应用程序、服务和控件。
在这些应用程序、服务和控件中可使用由操作系统提供的图形用户界面或控制台API。
企业版
(EnterpriseEdition)
可用来开发和调试为Internet或企业内网(intranet)设计的客户-服务器应用程序。
在VisualC++5.0企业版还包括了开发和调试SQL数据库应用程序和简化小组开发的开发工具。
第三节VisualC++5.0的新特性
如果你没有使用过VisualC++4.x,或者虽然使用过VisualC++4.x,但对它还不是非常之熟悉,那么你可以跳过这一节的内容,继续阅读本书的其它内容。
在这一节里列举了VisualC++5.0中新增的所有特性,这些内容对熟练掌握了VisualC++4.x的程序员来说是很有用处的,他们可以通过阅读本节了解到VisualC++5.0所做的改进,从而知道自己应该补充的是哪一方面的内容。
而对于VisualC++的初学者和刚入门者来说,了解这些内容就不是那么有必要了,尤其是当你急切地想进入VisualC++5.0的编程实践中去的时候。
下面我们分版本来讲述VisualC++5.0相对于上一个版本所新增加的内容:
(1)专业版
在VisualC++5.0专业版中包括如下的新增特性:
C++语言新增下列C++关键字:
bool、explicit、false、mutable、true和typename。
●允许使用__declspec来声明指定的存储类属性是应用于某一类型还是某一类型的一个变量。
编译器、链接器和NMAKE
●编译器添加了对COM的支持,从而简化了使用COM对象的C++客户的开发。
为了演示如何使用该特性来支持COM,新增了如表1.2所示的示例程序。
表1.2为演示编译器对COM的支持而新增的示例程序
示例程序
演示内容
ACDUAL
MFC应用程序中双界面的支持
INPROC
进程内自动化服务器
MFCCALC
使用自动化服务器实现的一个简单计算器
COMEXCEL
单独运行的自动化客户程序。
该程序创建一个新的MicrosoftExcel电子表格,并生成饼图。
COMIDE
单独运行的自动化客户程序。
该程序自动操纵MicrosoftDeveloperStudio
COMMAIL
单独运行的自动化客户程序。
该程序为MicrosoftExchange4.0自动操纵了MAPI
COMMMAP
不同COM接口入口映射宏的使用
LABRADOR
ATL的使用。
该程序实现了一个没有用户界面的EXE服务器
FRETHREAD
使用编译器的COM支持编写多线程客户程序和自由线程服务器
ALLINONE
MAC、STL、ATL和COM的使用
●使用/O1选项编译生成的代码大小将比VisualC++4.2版小5%到10%。
●链接器使用了/FIXED选项来创建更小的供发行的应用程序。
因此,在使用剖析程序时,由于需要重定位信息,链接器必须使用/PROFILE和/FIXED:
NO选项。
这同样适用于其它如BoundsChecker或Purify之类的链接后(post-link)工具。
●新增的/EH编译选项可以更有效的控制C++异常处理。
C++同步异常处理允许编译器生成更小的代码,因此它是VisualC++5.0新的默认C++异常处理模式。
●对用来控制代码优化所面向的处理器的编译器选项/G3、/G4、/G5、/G6和/GB作了修改。
●将/GX编译器选项映射为/EHsc。
●允许使用链接器选项/PDBTYPE指定包括调试信息的程序数据库(PDB)。
该选项可节省磁盘空间并加快链接
●在NMAKE中支持批处理规则。
AppWizard
●新的AppWizard可以自动管理基于对话框的应用程序中的对话框类。
只需要简单的创建一个基于对话框的应用程序,并选择对自动化的支持,就可以象早期版本的AppWizard一样,得到一个支持基本自动化的基于对话框的应用程序。
通过单独的代理类,对话框类也可以通过自动化导出。
你可以添加方法和属性来导出对话框中的元素。
●定制的AppWizard可以改变工程创建时的设定。
例如,你可以在目标创建之后调整编译器、链接器和查看设定或者添加定制的创建步骤。
MFC
●asynchronous(URL)moniker允许应用程序异步的下载文件和控件属性,以便在任务完成后为其它进程释放系统资源。
●可以在Web浏览器(如InternetExplorer3.0)或支持ActiveX文档的OLE容器(如MicrosoftOfficeBinder)的整个客户区显示活动的文档。
●Win32InternetAPI(WinInet)使Internet成为任意应用程序的一个完整部分并简化了Internet服务,如FTP、HTTP和gopher的访问。
●增加了对DAO3.5的支持。
●增加了对ODBC3.0的支持,并对MFCODBC类作了几个重要的修改。
●COleDateTime成员函数SetDate、SetDateTime、SetTime的返回值从BOOL改变为int。
每一个成员函数当COleDateTime对象被正确设置时返回0,否则返回1。
该返回值基于DateTimeStatus枚举类型。
●新增示例程序IMAGE。
该程序生成一个可以异步下载数据的ActiveX控件。
ActiveTemplateLibrary(ATL)2.1
●ATL2.1版支持创建既小又快的ActiveX控件。
CRuntimeLibrary
●新增的函数_itoa、_i64toa和_ui64toa将数据转换为一个以null结尾的字符串。
所对应的宽位字符版本为_itow、_i64tow和_ui64tow为_itoa、_i64toa和_ui64toa。
●改善了下列的通用浮点超越函数的性能:
pow、sqrt、log、log10、sin、cos、tan、asin、acos、atan。
●改善了内存移动和内存拷贝函数的性能。
ANSI标准C++库
●VisualC++的标准库遵从1996年9月24日公布的ANSIC++(X3J16)工作单——ANSIDocNo.X3J16/96-0178WG21/N0996。
该标准于1996年7月在Stockholm会议上制定。
OLEDB
●OLEDB是一组OLE接口,它使应用程序可以以统一的方式访问保存在不同信息源中的数据。
这些接口支持适合于数据源的大量数据库功能性,并允许数据源共享其数据。
所配套的OLEDB软件开发工具包所提供的一组软件部件、工具和文档可以在开发OLEDB客户和提供程序提供帮助。
ERRLOOK工具
●ERRLOOK工具可以使用系统错误的值来检索相应的错误消息,其中包括OLEHRESULT。
错误值可以通过包括拖放、编辑命令等的多种方法给出。
由ERRLOOK所返回的错误消息文本可以复制并粘贴到其它应用程序中。
除了以上新增特性外,在VisualC++5.0光盘上的\DEVSTUDIO\VC\SAMPLES目录下还包括了一些新增的示例程序。
(2)企业版
除包括专业版中的所有特性外,VisualC++5.0企业版还包括下列特性以支持企业级应用程序的开发:
●MicrosoftTransactionServer(Microsoft事务服务器)用于创建基于事务的应用程序。
●VisualDatabaseTools(可视化数据库工具)提供了数据库和SQL查询的图形化设计。
●调试数据库连接时具有更好的性能,该进程将比过去快上很多。
●扩展的SQL数据类型支持使你可以方便的将本地变量变为除text和image外的所有SQL数据类型。
这种变换包括money类型和datetime类型。
可以在本地变量和NULL值之间相互变换。
还可以方便的查看包括text和image在内的所有SQL数据类型。
●在光盘上的\DEVSTUDIO\VC\SAMPLES目录下包括了特定于企业的版的新增示例程序。
(3)学习版
VisualC++5.0学习版包括了学习C/C++和使用MFC、OLE、ODBC、DAO、ActiveX和COM的各种工具,但不包括下面的特性:
●到MFC的静态链接
使用VisualC++5.0学习版编写的应用程序只能在运行时链接到MFC动态链接库。
●代码优化
不能使用/O选项来生成更小和更快的代码。
●程序剖析
不能使用剖析程序来分析程序代码中的某一部分是否可以从性能改进中获益。
●RemoteData控件及其它的数据绑定控件
除了上面的内容外,VisualC++5.0学习版包括专业版中的其它新特性。
(4)集成开发环境
MicrosoftDeveloperStudio用于VisualJ++1.1、VisualInterDev、VisualC++5.0和MSDN。
新的DeveloperStudio包括以下的新特性:
●自动化和宏
可以使用VisualBasic脚本来自动操纵例行的和重复的任务。
可以将VisualStudio及其组件当作对象来操纵,还可以使用DeveloperStudio对象模型创建集成的附加程序。
●ClassView
使用文件夹来组织C++和Java中的类,包括使用MFC、ATL创建或自定义的新类。
●可定制的工具条和菜单
●连接到正在运行的程序并对其进行调试,还可以使用宏语言来自动操作调试器。
●可以在DeveloperStudio中查看Internet上的WorldWideWeb页。
●可以在一个工作空间中包括多个不同类型的工程
工作空间文件使用扩展名.dsw来代替过去的扩展名.mdp,工程文件使用扩展名.dsp来代替过去的扩展名.mak。
●改进的资源编辑器
在VisualC++中,可以使用WizardBar来将代码与程序中的可视元素挂钩;
快捷键、二进制、对话框和字符串编辑器支持定位至快捷键、ASCII字符串、十六进制字节串、控件ID和标签及指定字符串的Find命令;
更方便的一次修改多个项(可以快捷键、对话框、菜单和字符串)的属性。
●改进的文本编辑器
可以使用正确的句法颜色设置来显示无扩展名的头文件。
可以定制选定页边距的颜色来更好的区分同一源代码窗口中的控件和文本区域。
FindinFiles命令支持两个单独的窗格。
●上下文相关的What’sThis帮助
●改进了的WizardBar
可用于VisualJ++。
●新增的向导
添加了集成到VisualJ++和VisualInterDev中的新增向导。
第四节DeveloperStudio的使用
在一整套的VisualStudio97中,VisualC++5.0、VisualJ++1.1和VisualInterDev都使用同一个开发环境,称作DeveloperStudio。
你将在DeveloperStudio中创建所开发的应用程序的源文件、各种资源文件及其它文档。
这些文件以工作空间和工程的形式进行组织。
DeveloperStudio中一次只能打开一个工作空间,在同一个工作空间中可以包括多个工程,一般来说,每一个工程你所开发的一个应用程序。
这些工程相互之间可以具有某个联系和从属关系,也可以彼此完全独立。
此外,这些工程还可以是不同类型的,比如说,你可以在一个已经包括有一个VisualC++工程的工作空间中添加一个VisualJ++或是VisualInterDev工程。
工程中除了包括了应用程序所用到的源文件、资源文件外,还可以包括其它类型的文件,如应用程序的规格说明书、流程图、开发日程等等。
对于那些由ActiveX部件(如MicrosoftWord等)所创建的ActiveX文档,可以在DeveloperStudio中直接打开。
而对于那些与其它类型的应用程序相关联的文档,你也可以通过DeveloperStudio在独立的窗口的打开。
DeveloperStudio所包括的内容是很丰富的。
本节只讲述一些基本的概念和用法。
这些用法是进行下一步所不可缺少的。
对一些特殊的用法,我们将在本书后面的章节中需要用于再作说明。
由于本书假定你已经是一个熟练的Windows95/NT用户,因此,安装VisualC++的过程对于你来说应该是一个相对很容易的事,所以我们不再在这个问题上浪费时间。
下面的过程中,我们假定你已在你的计算机中安装上了VisualC++5.0,在一般情况下,这同时也安装了DeveloperStudio,并以它作为VisualC++5.0的集成开发环境。
这时,从你的开始菜单中运行VisualC++5.0,屏幕显示应该如图1.1所示。
图1.1还标注了DeveloperStudio中的几个常提到的部件的名称,以使得,当以后我们提到这些名词时,你可以知道它们所指的是DeveloperStudio中的哪一部分。
图1.1MicrosoftDeveloperStudio-VisualC++5.0的集成开发环境
当然,你所看到的内容和工具条等也许会有少许的不同,这取决于你的设置。
下面我们来讲述其中的主要部分。
我们看到,在DeveloperStudio,整个窗口被分成了若干个部分,需要注意的事,随着设置的不同,或者所安装的软件包的不同,或者是处于开发的不同阶段(典型地,在输入源代码和调试程序的两个不同阶段),你所见到的DeveloperStudio组件和相互之间的位置也会不一样。
前面说到过,在DeveloperStudio中,我们是以工作空间(workspace)和工程(project)来组织文件和进行工作的。
工作空间位于这个结构的最顶层,因此,我们首先需要创建一个工作空间。
创建工作空间通常有两种方法:
第一种方法是显式的创建一个空白的工作空间,然而向工作空间中添加工程。
这时,我们从DeveloperStudio的File菜单下选择New...命令,这时出现如图1.2所示的对话框。
这时我们在Workspacename处键入工作空间的名字,这里假设为WorkSpc,则DeveloperStudio将在Location所指定的目录下创建名为WorkSpc的子目录(当在Workspacename处键入完工作空间名后,可以在Location处修改这个默认设置),然后以WorkSpc.dsw的文件名将该工作空间保存到这个目录下。
第二种创建工作空间的办法时直接创建一个工程。
创建一个新的工程同样是选择File菜单下的New...命令,在类似于图1.2的对话框中单击Project选项卡,如图1.3所示。
然后在该对话框中选择Createnewworkspace单选钮(这是DeveloperStudio的默认选项)。
注意在图1.3所示的对话框中,Projectname和Location的意义和图1.2中的Worksapcename和Location的意义类似。
这样,在创建工程时,DeveloperStudio将创建一个同名的工作空间。
然后将所创建的工程添加到该工作空间中。
图1.2创建空白工作空间
如果仅在工作空间中包括一个工程的话,使用第二种方式显然是很合理的,并且,也要比使用第一种方式创建空白工作空间,然后再在空白工作空间中添加工程的方法要简洁和方便。
在今后的很多情况下,我们都将使用第二种方式来创建工程和包括工程的工作空间。
但并不是说第一种方式就没有用处了。
事实上,在第二种方法中,DeveloperStudio将工作空间和工程保存到Location所指定的同一个目录下,这对于单个工程的工作空间是合理的。
但如果你希望在工作空间中包括多于一个的工程的话,你也许希望在保存工作空间的目录下新建子目录来保存这些工程,因为这样更有条理,更利于文件的管理。
这时,我们就需要使用第一种方式来创建空白工作空间,然后再在这个工作空间中新建和添加工程。
在工作空间中新建工程的方法和上面的第二种方式几乎一样。
只不过这时我们应该在图1.3所示的对话框中选择Addtocurrentworkspace(在图1.3中,这个单选钮是灰的,这是因为当前并没有打开的工作空间的缘故)。
要注意这时Location处的目录名是基于当前工作空间所在的目录的。
单击OK后,DeveloperStudio根据在Projectname处
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第一章Visual C+概述 第一章 Visual C+ 概述