VC++_2008_应用开发入门教程

VC++_2008_应用开发入门教程
VC++_2008_应用开发入门教程

VS 2008 IDE使用基础

1. 工具栏选项

在工具栏区域内右击,就会弹出如下所示的工具栏列表的弹出式菜单,其中当前在窗口的工具栏区域显示的工具选项前面带有对号标记,默认情况下是标准(Standard)工具栏选项,如图1-1所示。

图1-1 工具栏选项弹出式菜单

可以在工具栏列表菜单中决定让哪些工具栏显示在工具栏区域。如果某个工具栏未被选中,那么单击其左边的灰色区域即可选中该工具栏,并使其显示在窗口的工具栏区域,这时在VS 2008 IDE的主菜单中也会增加相应的子菜单项及其相应的下拉菜单;单击某个已选中的工具栏项即可隐藏该工具栏,使其不显示在窗口的工具栏区域,如图1-2所示。常用的工具栏有标准(Standard)工具栏、生成(Build)、调试(Debug)等。

图1-2 显示调试工具栏在窗口的工具栏区域

2. 项目与解决方案

项目是构成某个程序的全部组件的容器,也包括其他辅助数据的文件。某个项目的所有文件都存储在相应的项目文件夹中,关于该项目的详细信息存储在一个扩展名为.vcproj的XML文件中,该文件同样存储在相应的项目文件夹中。项目文件夹也包括其他文件夹,如用来存储编译以及连接项目时所产生的输出。

解决方案是一种将所有程序和其他资源聚集在一起的机制,存储的是与一个或多个项目有关的所有信息的文件夹,如用于企业经营的分布式订单管理系统可由若干个不同的程序组成,而各个程序可能是作为

一个解决方案内的项目开发的。因此,项目文件夹是解决方案文件夹的子文件夹。与某个解决方案中的项目有关的信息存储在扩展名为.sln和.suo的两个文件中。当创建某个项目时,如果没有选择将该项目添加到现有的解决方案中,那么系统将会自动创建一个新的解决方案。

3. 为Win32控制台应用程序创建项目的过程

(1)在菜单栏中选择File->New->Project,打开如图1-4所示的新建项目(New Project)对话框。

图1-3 新建项目的步骤

图1-4 新建项目对话框

新建项目(New Project)对话框左边的窗格中显示了可以舰船的项目类型,右边窗格显示了可供左边窗格中选定的项目类型使用的模板列表。当创建构成项目的文件时,(Application Wizard)将使用选中的模板。在名称(Name)编辑框中输入该项目的名称,或使用其他项目名称;默认情况下,解决方案的名称与项目的名称相同,当然可以修改解决方案名称或选择已有的解决方案名称。在位置(Location)编辑框中输入包含本项目的解决方案的名称,可使用浏览(Browse)按钮来为解决方案选择其他路径。如果仅仅输入项目名称,则解决方案文件就自动被保存到与项目同名的文件夹中。

在新建应用程序向导中,如图1-5所示的新建向导对话框中可选择空项目(Empty Project)或预编译头(Recompiled header)复选框。如图1-6所示,若选择空项目(Empty Project),则新建的项目中没有任何文件,初学者常采用这种方式新建项目;若选择预编译头(Recompiled header)复选框,则新建的项目中包含预编译文件,如stdafx.h文件,该机制是为了当程序中有大量文件时编译过程效率更高,但在需要情况下是没有必要的。

图1-5 新建应用程序向导

图1-6 新建的两种不同应用程序项目

若在新建项目向导中选择空项目(Empty Project)复选框,完成项目创建之后,需要向项目中添加新的源文件。在解决方案资源管理器(Solution Explorer)窗格中选中某一个项目,右击鼠标,在弹出的菜单(如图1-**所示)中选择添加(Add)->新建项(New Item)。这时会弹出一个如图1-*所示的新建项(New Item)对话框,单击其左边窗格中的代码(Code)和右边窗格中的C++文件(.cpp),并在文件名编辑框中输入新建的C++文件(.cpp)的名称,单击添加按钮之后,这个新C++文件(.cpp)就会被添加到项目中,并显示在编辑(Editor)窗口中。

图1-* 新建项菜单

图1-* 添加项目文件对话框

解决方案资源管理器(Solution Explorer)选项卡中给出了当前解决方案内所有项目及其包含的文件的视图,双击解决方案资源管理器(Solution Explorer)选项卡中某个文件的名字,就可以在编辑(Editor)窗格现实该文件的内容。在编辑(Editor)窗格中单击适当的选项卡,就可以在任意已经显示出来的文件

之间进行切换。

类视图(Class View)选项卡中现实项目内定义的类以及各个类的内容,可使用类视图(Class View)选项卡迅速、容易地到处移动与程序中所有类的定义和实现有关的代码,如图1-7所示。

图1-7 类视图

资源视图(Resource View)选项卡中现实程序使用的对话框、图标、菜单、工具栏和其他资源,如图1-8所示。

图1-8资源视图(Resource View)

若资源视图没有显示在VS 2008 IDE左边解决方案资源管理器所在窗格的选项卡中,则单击默认工具栏的最右边的最后一个按钮,或在菜单栏中单击“视图(View)”菜单,在弹出的下拉菜单中单击资源视图、属性视图、工具箱等,即可将资源视图、属性视图等显示在VS 2008 IDE左边解决方案资源管理器所在窗格中。

图1-9 资源视图和属性视图的显示

4. 构建解决方案

在工具栏区域内右击,在弹出的工具栏列表中选择生成(Build)工具栏选项,使生成(Build)工具栏显示在工具栏区域,同时在菜单栏中增加生成子菜单及其下拉菜单选项,如图1-9所示。否则无法在工具栏和菜单栏中看到生成解决方案的项目菜单和工具栏按钮。

图1-9 生成工具栏

按F7键或选择菜单项生成(Build)->生成解决方案(Build Solution),也可以单击对应该菜单项的工具栏按钮(如图1-10所示)。

图1-10生成解决方案按钮

5. 程序的Debug版本和Release版本

Debug版本的程序包括帮助用户调试程序的信息,使用户可以在出现问题时单步执行代码,以检查程序中的数据值。而Release版本的程序不包括调试信息,并且打开了编译器的代码优化选项,以提供最高效的可执行模块。若需要为应用程序增加其他配置,就可通过生成(Build)->配置管理器(Configure Manager)菜单来实现,如图1-11所示。

图1-11配置管理器(Configure Manager)

在开发应用程序时,一般使用调试(Debug)配置。在使用调试(Debug)配置测试过应用程序之后,通常将程序重新构建成Release版本,这样将产生没有调试和跟踪能力的优化代码,使程序运行得更快,而且占用更少的内存。

6. 执行程序

在成功编译过解决方案之后,可以按下Ctrl+F5组合键来执行程序,就可以看到应用程序运行的实际效果。

7. 创建和执行Windows应用程序

MFC是基于Windows API 的简单封装,其核心架构基于“Document/View”架构和消息流动机制。CLR库是随着.Net Framework 2.0 和VS2005一起发布的库,其核心的实现和C#/https://www.360docs.net/doc/7c5123660.html,一样,都是基于公共语言运行库。.Net Framework封装了大量系统的API,以类库的形式提供给开发者。C++中的CLR库可以使用其中和本机代码有关的部分,CLR库中的C++颠覆了很多标准C++的传统,这里的C++更像是C#/Java等编程语言,叫做C++/CLI。

7.1 创建MFC应用程序

(1)在文件菜单中选择新建->新建项目,在弹出的添加新项目对话框的右边窗格中选择MFC应用程序,然后输入项目名,单击确定按钮。

图1-12 添加新项目对话框

(2)在MFC应用程序向导对话框中,选择相应的选项,即可完成MFC应用程序项目的创建。完成MFC应用程序创建后,项目中会自动添加许多文件,如扩展名为.cpp的文件包含可执行的C++代码,而扩展名为.h的文件包含由可执行代码使用的定义组成的C++代码,扩展名为.ico的文件包含图标。

7.2 创建Windows Forms应用程序

(1)在文件菜单中选择新建->新建项目,在弹出的添加新项目对话框的右边窗格中选择Windows窗体应用程序,然后输入项目名,单击确定按钮。

图1-14 新建Windows窗体应用程序

(2)在Windows窗体应用程序向导对话框中,选择相应的选项,即可完成Windows窗体应用程序项目的创建。如图1-15所示,完成Windows窗体应用程序创建后,就会发现Windows窗体应用程序没有菜单或工具栏,并且只有一个窗口。当然,可以很轻松地从工具箱中添加所有窗口组件到Windows窗体中,如菜单栏、工具栏、按钮等。单击默认工具栏的最右边的最后一个按钮,或在菜单栏中单击“视图(View)”菜单,在弹出的下拉菜单中单击工具箱,即可将工具箱显示在VS 2008 IDE右边的窗格中。工具箱窗口中给出了可以添加到Windows窗体中的标准组件,在VS 2008 IDE中可以以图形化的方式编辑任何GUI组件,而相应代码会自动调整。因为为Windows窗体(Windows Forms)开发GUI面向的是图形设计方法,而不是编码方法。

图1-15 Windows窗体应用程序项目

8. 在基于MFC的Windows程序开发过程中,主要使用以下几种工具

(1)在类视图(Class View)中使用项目的上下文菜单,给项目添加新的类和资源。其中资源是那些

由不可执行的数据构成的对象,如位图、图标、菜单和对话框。

(2)在类视图(Class View)中使用类的上下文菜单,扩充并定制程序中已有的类,为此要使用的菜单项是添加函数和添加变量。

(3)使用资源编辑器创建或修改如菜单、工具栏这类对象。

9. VC++中的文档与视图

(1)MFC中文档与视图的界定

在文档/视图结构里,文档是一个应用程序数据基本元素的集合,它构成应用程序所使用的数据单元;另外它还提供了管理和维护数据的手段。文档是一种数据源,数据源有很多种,最常见的是磁盘文件,但它不必是一个磁盘文件,文档的数据源也可以来自串行口、网络或摄像机输入信号等。

视图是数据的用户窗口,为用户提供了文档的可视的数据显示,它把文档的部分或全部内容在窗口中显示出来。视图还给用户提供了一个与文档中的数据交互的界面,它把用户的输入转化为对文档中数据的操作。每个文档都会有一个或多个视图显示,一个文档可以有多个不同的视图。例如,在Excel电子表格中,我们可以将数据以表格方式显示,也可以将数据以图表方式显示。一个视图既可以输出到窗口中,也可以输出到打印机上。

MFC的文档/视图结构机制把数据同它的显示以及用户对数据的操作分离开来,所有对数据的修改由文档对象来完成,视图调用这个对象的方法来访问和更新数据。MFC中文档与视图的关系如下图所示:

图1- MFC中的文档与视图

(2)VC++中的两类文档/视图结构程序

VC++中主要有单文档界面(SDI)应用程序和多文档界面(MDI)应用程序两种类型的文档/视图结构程序。

在单文档界面程序中,用户在同一时刻只能操作一个文档,如Windows OS中的记事本程序(如图1-*所示)。在这些应用程序中,打开文档时会自动关闭当前打开的活动文档,若文档修改后尚未保存,会提示是否保存所做的修改。因为一次只开一个窗口,因此不象Word那样需要一个窗口菜单。单文档应用程序一般都提供一个File菜单,在该菜单下有一组命令,用于新建文档(New)、打开已有文档(Open)、保存或换名存盘文档等。这类程序相对比较简单,常见的应用程序有终端仿真程序和一些工具程序。

图1- 单文档程序(记事本)

一个多文档界面应用程序也能操作文档,但它允许同时操作多个文档,如图1-*所示,Microsoft Word 就是一个多文档界面应用程序,可以打开多个文件(同时也就为每个文件打开一个窗口),可以通过切换活动窗口激活相应的文档进行编辑。多文档应用程序也提供一个File菜单,用于新建、打开、保存文档。与单文档应用程序不同的是,它往往还提供一个Close(关闭)菜单项,用于关闭当前打开的文档。多文档应用程序还提供一个窗口菜单,管理所有打开的子窗口,包括对子窗口的新建、关闭、层叠、平铺等。关闭一个窗口时,窗口内的文档也被自动关闭。

图1-8 多文档程序(如Microsoft Word)

(3)使用文档/视图结构的意义

文档/视图结构大大简化了多数应用程序的设计开发过程,其优点主要表现下面几个方面:

首先,将数据操作和数据显示、用户界面分离开。这种“分而治之”的思想使得模块划分更加合理、模块独立性更强,同时也简化了数据操作和数据显示、用户界面工作。文档只负责数据管理,不涉及用户界面;视图只负责数据输出与用户界面的交互,可以不考虑应用程序的数据是如何组织的,甚至当文档中的数据结构发生变化时也不必改动视图的代码。

其次,MFC在文档/视图结构上提供了许多标准操作界面,如新建文件、打开文件、保存文件、打印等,减轻了用户的工作量。用户不必再书写这些重复的代码,从而可以把更多的精力放到完成应用程序特定功能的代码上,如从数据源中读取数据和显示。

最后,支持打印预览和电子邮件发送功能。用户无需编写代码或只需要编写很少的代码,就可以为应用程序提供打印预览功能。另外,MFC支持在文档视结构中以电子邮件形式直接发送当前文档的功能,当然本地要有支持MAPI(微软电子邮件接口)的应用程序。

由于文档视结构功能如此强大,因此一般我们都首先使用AppWizard生成基于文档/视图结构的单文档或多文档框架程序,然后在其中添加自己的特殊代码,完成应用程序的特定功能。但是,并非所有基于

窗口的应用程序都要使用文档/视图结构。以下有两种情况不宜采用文档/视图结构:

●不是面向数据的应用或数据量很少的应用程序,不宜采用文档/视结构,如磁盘扫描程序、时钟程

序、过程控制程序等。

●不使用标准的窗口用户界面的程序,如虚拟游戏程序等。

在MFC应用程序中,与文档/视图结构相关的类有CEditorApp、CMainFrame、CEditorView和CEditorDoc,它们分别是应用程序类CWinApp、框架窗口类CFrameWnd、视图类CView和文档类CDocument 的派生类。

其中,应用程序类负责一个且唯一的一个应用程序对象的创建、初始化、运行和退出清理过程。在文档/视图结构中,应用程序通过为应用程序所支持的每一种文档创建一个文档模板,来创建和管理所有的文档类型并为它们生成相应的视图和框架窗口。

文档模板负责创建文档、视图和框架窗口。一个应用程序对象可以管理一个或多个文档模板,每个文档模板用于创建和管理一个或多个同种类型的文档(这取决于应用程序是单文档SDI程序还是多文档MDI 程序)。

MFC提供了一个文档模板类CDocTemplate支持文档模板。文档模板类是一个抽象的基类,它定义了文档模板的基本处理函数接口。由于它是一个抽象基类,因此不能直接用它来定义对象而必需用它的派生类。对一个单文档界面程序,使用CSingleDocTemplate(单文档模板类),而对于一个多文档界面程序,使用CMultipleDocTemplate。

文档模板定义了文档、视图和框架窗口这三个类的关系。通过文档模板,我们可以知道在创建或打开一个文档时,需要用什么样的视图、框架窗口来显示它。这是因为文档模板保存了文档和对应的视图和框架窗口的CRuntimeClass对象的指针。此外,文档模板还保存了所支持的全部文档类的信息,包括这些文档的文件扩展名信息、文档在框架窗口中的名字、代表文档的图标等信息。

一般在应用程序的InitInstance成员函数实现中创建一个或多个文档模板。在InitInstance中,首先声明一个CSingleDocTemplate*类型的单文档模板对象指针(因为这里的文本编辑器使用单文档界面)。然后创建该类型的模板对象。如果要使用多文档界面,只需要将这里的CSingleDocTemplate改为CMultiDocTemplate,当然,CMainFrame也要改为从CFrameWnd改为CMDIChildWnd或其派生类。

在CSingleDocTemplate构造函数中,还包含一个IDR_MAINFRAME参数。它指向一个字符串资源,这个字符串给出了文档所使用及显示时所要求的几个选项,包括文档名字、文档的文件扩展名、在框架窗口上显示的名字等等,我们称之为文档模板字符串。有关文档模板字符串还将在下一章使用多个文档模板这一节作详细阐述,因此这里就不展开讲了。

然后,InitInstance调用AddDocTemplate将创建好的文档模板加入到应用程序可用的文档模板链表中去。这样,如果用户选择了File-New或File-Open菜单要求创建或打开一个文档时,应用程序类的OnNewDocument成员函数和OnOpenDocument()成员函数就可以从文档模板链表中检索出文档模板提示用户选择适当的文档类型并创建文档及相关的视图、框架窗口。

文档

Editor的文档类CEditorDoc从CDocument派生下来,它规定了应用程序所用的数据。如果需要在应用程序中提供OLE功能,则需要从COleDocument或其派生类派生出自己的文档类。

视图

Editor的视图类从CView派生,它是数据的用户窗口。视图规定了用户查看文档数据以及同数据交互的方式。有时一个文档可能需要多个视图。如果文档需要卷滚,需要从CScrollView派生出视图类。如果希望视图按一个对话框模板资源来布置用户界面,可以从CFormView派生。

框架窗口

视图在文档框架窗口中显示,它是框架窗口的子窗口。框架窗口作用有二:一是为视图提供可视的边框,还包括标题条、一些标准的窗口组件(最大、最小化按钮、关闭按钮),象一个容器一样把视图装起来。二是响应标准的窗口消息,包括最大化、最小化、调整尺寸等。当框架窗口关闭时,在其中的视图也被自动删除。视图和框架窗口关系如图7-6所示:

对于SDI程序,文档框架窗口也就是应用程序的主框架窗口。在MDI应用程序中,文档框架窗口是

显示在主框架窗口中的子窗口(通常是CMDIChildWnd或其派生类)。可以从主框架窗口类派生出新类来包含你的视图,并指定框架的风格和其他特征。如果是SDI程序,则从CFrameWnd派生出文档框架窗口:如果是MDI窗口,则需要从CMDIFrameWnd派生出主框架窗口,同时在从CMDIChildWnd或其派生类派生出一个新类,来定制特定文档窗口的属性和功能。在应用程序运行过程中,以上几种类型的对象相互协作,来处理命令和消息。一个且唯一的一个应用程序对象管理一个或多个文档模板,每个文档模板创建和管理一个(SDI)或多个文档(MDI)。用户通过包含在框架窗口中的视图来浏览和操作文档中的数据。在SDI应用程序中,以上对象关系如图7-7所示。

相关主题
相关文档
最新文档