第1章VisualC++集成开发环境•VisualC++是一个功能强大的可视化应用程序开发工具。其凭借强大功能,受大了广大程序员的欢迎。当今流行的VisualC++的开发工具是6.0版本。下面来介绍VisualC++6.0的一些基本情况。1.1VisualC++6.0概述•VisualC++是一种C/C++语言的集成开发环境(IDE)。当最初还处于DOS时代的Borland公司推出了TurboPascal和TurboC,让程序员感受到了把编译器和编辑器集成在一起使用时的方便。Microsoft公司也看到了这一点,于是,两个公司开始合作,推出了QuickC和MicrosoftC/C++等多个DOS版本的C/C++集成开发环境。•随着Windows的不断成熟,于是Microsoft开始开发Windows下的VisualC++。经过多次版本的修订与更新,现在大多数程序员使用的是VisualC++6.0版本。•VisualC++是一个可视化的C++的集成开发环境。在使用VisualC++时,开发人员可以通过鼠标拖动方便地设计程序的界面,相应的代码系统会自动生成。MFC(MicrosoftFundermentalClasses)是微软提供的VisualC++可以调用的类库,其中封装了开发人员常用的类。使用MFC可以大大提高编程人员的工作效率。1.2VisualC++6.0界面介绍•安装好VisualC++开发环境后,桌面上并没有其快捷图标,需读者自己修改。选择“开始”菜单,从所有程序中,找到MicrosoftVisualStudio6.0级联菜单下的MicrosoftVisualC++菜单项。选择该菜单项,并将其拖动到桌面上,则在桌面上创建了MicrosoftVisualStudio的快捷图标。•双击快捷图标,即可启动VisualC++6.0集成开发环境。每次运行VisualC++6.0时,会弹出一个【Tipoftheday】对话框,如下图所示。1.2VisualC++6.0界面介绍•技巧:【Tipoftheday】对话框中介绍了很多关于开发环境的使用方法以及编程方面的小技巧。如果想在下次启动VisualC++6.0时不再显示该提示对话框,可以选择下一次启动时不再显示它。1.2VisualC++6.0界面介绍•为了便于说明,首先创建一个IDE的MFC项目(具体创建步骤,后面会详细介绍),如下图所示。1.2VisualC++6.0界面介绍•从上图中可以看出,VisualC++的界面被分成了7部分。上面依次标题栏、菜单栏和工具栏。中间左侧部分是工作区窗口,右侧部分是编辑区。最下方是输出窗口和状态栏。1.2.1工作区窗口和输出窗口•工作区窗口和输出窗口是在一个程序编译时使用最多的停靠式窗口。工作区窗口中显示了当前程序中的所有类、资源和文件信息。工作区窗口分为3个部分:ClassView(类视图)、ResourceView(资源视图)和FileView(文件视图)。•ClassView:显示当前工作区中所有工程定义的C++类。双击某个类名,VisualC++会自动打开这个类的文件,并将编辑区定位到该类的定义处。双击类中的成员函数和变量,编辑区则定位到该成员函数或变量的定义处。1.2.1工作区窗口和输出窗口•ResourceView:显示当前工作区中所有的资源。这些资源包括快捷键、对话框、图标、菜单、字符条编辑器、工具栏和版本信息。双击其中的ID号,会显示相应的资源信息。•FileView:显示属于当前工程的所有文件,包括C/C++源文件、头文件、资源文件等。•输出窗口与工作区一样,分为多个选择卡。其中最常用的选项卡被放在了最外面,分别为Build、Debug、FindinFiles1和FindinFiles2。1.2.1工作区窗口和输出窗口•Build:Build显示工程在创建中,经过的每一个步骤及相应信息。如果出现编译链接错误,那么出现错误的文件、原因、行号等内容会显示在Build中。双击该错误信息行,编辑区则定位在该错误出现的行。•Debug:工程通过编译后,运行调试版本时,Debug选项卡中会显示具体的调试信息。1.2.1工作区窗口和输出窗口•FindinFiles1和FindinFiles2:两个选项卡的作用相同,用于显示从多个文件中查找字符串的结果。当用户想要查看某个函数或变量出现在哪些文件中,单击【Edit】|【FindinFiles】命令,弹出【FindinFiles】对话框,如下图所示。在【FindinFiles】对话框中的【Findwhat】后的编辑框中,输入想要查找的内容,单击【Find】按钮即可。查找到的内容会输出到FindinFiles选项卡中。1.2.2菜单栏和工具栏•菜单栏位于集成开发环境的顶部。菜单栏由9个菜单项组成:File(文件)、Edit(编辑)、View(视图)、Insert(插入)、Project(工程)、Build(编译)、Tools(工具)、Windows(窗口)、Help(帮助)。每一个菜单项都有一个下拉式菜单,其中的菜单项用于完成特定的功能。•工具栏位于菜单栏的下面。工具栏可以称作是美化的菜单栏,其由许多按钮构成。其中的按钮用于完成特定的功能。工具栏可以任意拖动,也可以成为一个浮动窗口。1.2.3编辑区•在VisualC++中,编写应用程序代码的位置就是编辑区。该编辑区的功能十分强大,智能化程度也非常高。在编辑区内,除了能编写C/C++语言外,还能编写SQL、HTML和VBScript等其他编程语言。如下图所示。1.2.4联机帮助•VisualC++6.0不像其他集成开发环境一样把帮助系统集成在开发环境内部,而是提供了一个专门为VisualC++设计的MSDN类库。MSDN虽然是一个独立的帮助系统,但却能很好地和VisualC++6.0集成在一起。•MSDN的使用方式有以下几种:•单击【Help】|【Contents】命令;•单击【Help】|【Search】命令;•单击【Help】|【Index】命令;•按下【F2】键。•通过上述几种命令方式,即可运行MSDN。1.2.4VisualC++中的文件扩展名•打开程序HelloWorld所在的文件夹,看到该文件夹自动生成了许多扩展名不同的文件,如下图所示。1.2.6VisualC++中的文件扩展名•了解这些不同的扩展名文件,对于理解VisualC++6.0如何组织和管理项目文件是很有必要的。有关这些文件扩展名及其说明,如下表所示。第2章MFC与应用程序框架•在VisualC++集成开发环境下,使用微软基础类库MFC,可以开发出功能强大的Windows应用程序。另外,通过MFCAppWizard自动生成的MFC应用程序框架,还可以很方便地开发自己想要实现的功能。本章将先介绍有关MFC的基础知识,然后对MFC应用程序框架作具体介绍。2.1微软基础类库MFC•MFC是一种重要的编程方法,它是微软公司的特定的应用程序包装接口。本节将讲解MFC概述及其类库结构。2.1.1MFC概述•MFC的英文全称是MicrosoftFoundationClasses,即微软的基础类库。MFC的本质就是一个包含了许多微软公司已经定义好的对象的类库。•虽然开发人员要编写的程序在功能上各有不同,但是从结构上讲,都可以化分为对用户界面的设计、对文件的操作、对数据库的访问及对多媒体的使用等一些最主要的方面。这一点正是微软提出MFC类库最重要的原因。•在MFC类库中,大约有200个类。在进行程序设计时,只需简单地调用已有的类及类中的方法即可。另外,还可以利用“继承”方法从已有类中派生出自己想要的类。这时,派生出来的类不但拥有父类中的方法和属性,还可以根据自己的需求,自定义一些特殊的属性和方法,使得派生类功能更加强大。MFC有较好的移植性,可应用于众多平台。2.1.2MFC类库结构•MFC中类可划分为基类、应用程序结构类、窗口类、OLE类、数据库类等10大类,而且在其中的一些大类的基础上又派生出许多子类。MFC的类库结构的层次图如下图所示。2.1.2MFC类库结构•从上图中可以看出,CObject是一个原始基类。绝大多数MFC类的最终基类都是CObject。原始基类下面,主要包括以下几种类:MFC应用程序结构类,窗口、对话框和控件类,输出(设备文本)和绘图类,简单数据类型类,数组、列表和映射类,文件和数据库类,Internet和网络类,OLE类以及高度和异常类。•MFC的应用程序结构类分为CWinApp和CWinThread。使用MFC创建的每一个应用程序都包含一个由类CWinApp派生而来的应用程序对象。该对象是一个全局对象。应用程序对象主要用于处理应用程序的初始化,同时也处理应用程序事件的消息循环。•CCmdTarget和CCmdUI为MFC中常用的有关发送命令的类。CDocument为MFC中常用的应用程序文档的基类。CDocTemplate为文档模版类,通常是应用程序的单文档或多文档的基类。CView类是常用的视图类。2.2MFC应用程序框架分析•在前面介绍过如何创建一个基于单文档的应用程序。对于如何选择性地创建基于多文档或是基于对话框的应用程序,将会在后续章节详细介绍。本节主要对MFC应用程序框进行简单的概括,使读者了解MFC应用程序框架的结构与工作机制。2.2.1入口函数•入口函数就是指一个程序的入口点。WinMain函数是Windows程序的入口函数。为了便于讲解,首先要创建一个MFC应用程序,程序名命名为sample0201。具体创建步骤不再详细介绍。•从创建好的sample0201程序中,并不能找到WinMain函数。这是因为典型Windows程序的大部分初始化工作都是标准化的,因此把WinMain函数隐藏在应用程序的框架中。当一个程序编译时,会自动将该函数链接到程序中。•在计算机中找到VisualC++的安装目录,笔者安装在F盘,则按照下面这个路径依次打开文件夹,“F:\ProgramFiles\MicrosoftVisualStudio\VC98\MFC\SRC”。打开后,会发现一个源文件“WinMain.cpp”。该文件中则定义了MFC应用程序的入口函数AfxWinMain。文件的源代码如下:2.2.1入口函数•……•……2.2.1入口函数•当一个应用程序启动时,会自动调用应用程序框架内部的AfxWinMain函数。根据其前缀Afx就知道WinMain是一个全局的MFC函数。从上述代码中可以看出,WinMain函数会查找该应用程序的一个全局构造对象。该对象是由CWinApp的派生类创建,因此有程序启动时,它就被创建好了。然后WinMain对该应用程序进行初始化,在此过程调用的是该程序全局构造对象的InitApplication()和InitInstance()函数。完成初始化后,WinMain调用Run()函数,运行应用程序的消息循环。最后结束应用程序时,WinMain调用AfxWinTerm()函数,做一些清理工作。2.2.2InitInstance()函数•InitInstance()函数的作用是初始化程序。每次启动一个应用程序时,Winmain函数会自动调用InitInstance()函数。打开创建的程序sample0201,在该程序的CSample0201App类中,可以看到该程序对InitInstance()函数进行了重载。该重载代码如下:•……•……2.2.2InitInstance()函数•从上述代码中可以看出,在ShowWindow和UpdateWindos之前,程序要做两个动作,一个是注册窗口类,另一个是构建窗口类。InitInstance()函数规定了生成的应用程序是基于单文档的、基于多文档的或是基于对话框的。因此在CWinApp中必须重载InitInstance()函数。2.2.3应用类Run()函数•与查找WinMain函数类似,在VisualC++的安装目录下,按照下面这个路径依次打开文件夹,“F:\ProgramFil