
2.2 Visual C++ 6.0集成开发环境
Visual C++ 6.0为程序员提供了良好的可视化开发环境,主要包括文本编辑器、资源编辑器、工程创建工具、Debugger调试器等。程序员可以在集成开发环境中创建和打开工程,创建、打开和编辑文件,编译、链接、运行和调试应用程序。
2.2.1 Visual C++ 6.0开发环境
在已安装Microsoft Visual C++ 6.0的计算机上,单击【开始】菜单下的【程序】/【Microsoft Visual Studio 6.0】/【Microsoft Visual C++ 6.0】菜单项,进入Visual C++ 6.0集成开发环境。在集成开发环境中打开一个Visual C++的应用程序,如图2-9所示,窗口界面包括标题栏、菜单栏、工具栏、项目工作区、编辑区和输出区。

图2-9 Microsoft Visual C++ 6.0开发环境
主框架窗口的最上端为标题栏,用于显示应用程序名和当前打开的文件名。标题栏下面通常为菜单栏和工具栏。工具栏的下面一般为工作区和客户区。工作区用于显示当前打开工程的有关信息,包括工程的类、资源以及文件组成等内容。客户区用于文本编辑器、资源编辑器等进行文件或资源的编辑。主框架窗口的最低端为状态栏,用于显示关于菜单栏、工具栏等的简单说明信息以及文本编辑器中当前光标的行列号等。
2.2.2 项目与项目工作区
项目工作区通常位于屏幕左侧,包含【ClassView】、【ResourceView】及【FileView】三个选项卡。项目工作区文件的扩展名为“.dsw”,含有工作区的定义和项目中所包含文件的所有信息。要打开一个项目只需打开对应的项目工作区文件(*.dsw)。
1. 【ClassView】选项卡
【ClassView】选项卡显示的是当前项目中的类。如图2-10所示,应用程序“exam1_1”中包含的类包括“CAboutDlg”、“CExam1_1App”、“CExam1_1Doc”、“CExam1_1View”以及“CMainFrame”。读者通过单击类名前的加号,就可以展开类,查看类的成员函数、数据成员、全局变量等。类的成员的左边有一个或多个图标,表示该成员是变量还是成员函数,及访问类型等。例如:保护类型的成员,它的左边有一个钥匙图标。

图2-10 【ClassView】面板
在【ClassView】选项卡中双击某个类或成员,在源代码窗口能查看相应的源代码:
1)双击一个类,立即打开声明该类的头文件(.h),且光标会停留在类的声明处;
2)双击一个成员变量,光标会停留在类的头文件(.h)中该变量的声明处;
3)双击一个成员函数,光标会停留在该类的实现文件(.cpp)中成员函数的实现处。
在类的头文件中,可以依据C++语法直接修改类的成员函数、数据成员、全局变量、函数和类定义等,并反映到【ClassView】选项卡。此外,右击一个类名,选择快捷菜单命令,可以打开数据成员或成员函数的定义对话框。
2. 【ResourceView】选项卡
【ResourceView】选项卡显示的是当前项目中的资源类型。如图2-11所示,应用程序“exam1_1”中包含的资源类型包括加速键(Accelerator)、对话框(Dialog)、图标(Icon)、菜单(Menu)、串表(String Table)、工具条(Toolbar)、版本(Version)等。

图2-11 ResourceView面板
在【ResourceView】选项卡中,双击某个低层图标或低层资源文件名,可以打开相应的资源编辑器。例如,双击菜单资源【Menu】下的【IDR_MAINFRAME】选项,如图2-12所示,在窗口的右边,可以进行菜单的可视化编辑。

图2-12 菜单编辑器
添加新资源的方法有两种:
1)右击资源图标,在快捷菜单中选择【Insert】菜单项。
2)直接选择集成开发环境中的【Insert】/【Resource】菜单项。
3. 【FileView】选项卡
【FileView】选项卡显示的是当前项目中的源文件、头文件和资源文件等。如图2-13所示,可以查看应用程序“exam1_1”中包含的各类文件。

图2-13 【FileView】面板
在【FileView】选项卡中,双击某个文件名或图标,可以打开相应的文件编辑窗口。每个C++类对应两个文件:类的定义文件(*.h)和类的实现文件(*.cpp)。默认的定义文件和实现文件的主文件名称相同,为类名去掉第一个字母—类标识“C”。例如:框架类CMainFrm对应两个文件:“MainFrm.h”和“MainFrm.cpp”。
要在项目中添加文件,可单击【Project】/【Add to Project】/【Files】菜单项,在弹出的“文件”对话框中选择相应的文件。注意:这种操作只能将已有文件添加到项目中,若要添加未创建的新文件,则需要单击【File】/【New】菜单项。
要从项目中删除文件,可打开项目文件夹,选择相应文件后,按Del键,即可从项目文件集合中删除该文件。注意,这种操作并没有将该文件从磁盘上删除,通过单击【Project】/【Add to Project】/【Files】菜单项,还可以将该文件再次添加入本项目。如果希望从磁盘上删除该文件,那么需要使用资源管理器或我的电脑来进行删除操作。
2.2.3 应用程序向导AppWizard
AppWizard是Visual C++ 6.0提供的应用程序向导,程序员依据AppWizard提示,按步骤输入创建项目所需信息,如项目名称、存放位置、是否为多文档界面、是否附带工具栏、是否支持数据库等。当设置完所有参数后,AppWizard将生成基本Windows应用程序框架。该框架可以编译、运行,但不能完成任何实质性工作。要想使该框架完成特定工作,程序员需在框架中添加自定义代码。
1. 类向导工具ClassWizard
类向导工具ClassWizard可以帮助程序员建立新类、进行消息映射、添加新的类成员、修改现有类成员等。单击【View】/【ClassWizard】菜单项,或按组合键 +
,可以打开【ClassWizard】对话框,如图2-14所示。

图2-14 【ClassWizard】对话框
在ClassWizard的多个选项卡中,【Message Maps】选项卡和【Member Variables】选项卡是最常用的。【Message Maps】选项卡的功能是管理消息映射。程序员只需编写处理消息的函数,并在类中添加一个消息映射。
如图2-14所示,单击【Message Maps】选项卡,就可以看到:
1)对话框顶部有两个下拉列表框:【Project】显示程序员正在处理的项目名称,本例的项目名称是“exam1_1”;【Class name】要将消息处理函数映射为哪个类的成员函数,就在这里选择哪个类,本例选择“CExam1_1View”类。
2)对话框中部有两个列表框:Object IDs列表框列出了每个资源对象(例如,菜单、工具栏、对话框控件等)的资源ID。当这个资源对象显示在屏幕上时,可以产生命令或消息。在Object IDs列表框中单击,选中其中的一个资源ID,右边的Messages列表框中就会显示与之相关的消息列表。
3)选择需要的映射消息后,单击按钮,完成消息处理函数的添加,这时在Member functions列表框会显示生成的函数名。
4)单击按钮,或在Member functions列表框中双击函数,进入消息处理函数的定义位置,进行代码编辑。
程序员通过【ClassWizard】的【Member Variables】选项卡,可以为控件在所属对话框类中映射一个控件对象,通过控件对象调用控件类的方法,程序员可以很方便地对该控件对象进行操作。
单击【Member Variables】选项卡,如图2-15所示,【Project】下拉列表框提醒程序员正在处理的项目名称,本例中是“exam1_1”;在【Class name】下拉框中选择进行类成员变量编辑的类;【Control IDs】列表框中列出了属于该类的控件ID。选择控件ID,单击按钮,可以为这个控件映射值类型的成员变量或控件类型的成员变量,值类型的成员变量用于数据交换,控件类型的成员变量就是一个控件类的对象。

图2-15 【Member Variables】选项卡
2. Wizard Bar
Wizard Bar工具栏包含了三个相关的下拉列表框,依次为【Class List】、【Member List】和【Filter List】。
【Class List】列表框包含了应用程序定义的所有类;当前选择的类,决定可用的过滤器,全部过滤器包含在【Filter List】中;所选的过滤器决定【Member List】列表中显示的内容。选择Member中的一项,可跳到相应的成员定义。【Wizard Bar】最右边是一个【Action Control】图标。单击【Action Control】图标旁的向下箭头,会弹出一个菜单。通过选择菜单命令,可执行跳到函数定义、增加消息处理函数等操作。
2.2.4 集成开发基本操作
1. 打开应用程序
以打开“exam1_1”应用程序为例,单击【File】/【Open Workspace 】菜单项,将出现如图2-16所示的对话框。

图2-16 【Open Workspace】对话框
首先单击【查找范围】下拉列表,找到所要打开的项目的路径,再单击“文件类型”下拉列表,设定文件类型为“Workspaces(.dsw;.mdp)”,最后双击相应的项目工件区文件“exam1_1.dsw”,即可打开相应的应用程序。
另外,还可以通过查看最近使用过的工作区,来打开相应的应用程序。如图2-17所示,单击【File】/【Recent Workspace】菜单项,在出现的子菜单上选择“exam1_1.dsw”所在的菜单项,即可打开“exam1_1”程序。

图2-17 使用最近打开过的工作区打开应用程序
2. 关闭应用程序
要关闭应用程序,必须将整个项目的所有文件均关闭。所以,要单击【File】/【Close Workspace】菜单项,将应用程序的工作区全部关闭。
3. 编译运行应用程序
编译运行一个应用程序,主要使用【Build】菜单。图2-18列出了【Build】菜单中所包含的菜单项。

图2-18 【Build】菜单
在【Build】菜单下有【Compile】、【Build】、【Rebuild All】三个菜单项用于编译程序。
(1)【Compile】菜单项
单击【Build】/【Compile】菜单项,或按组合键+
,只编译当前活动文档,而不调用链接器或其他工具。如果编译没有错误或警告,输出窗口如图2-19所示,否则将显示编译过程中检查出的第一条错误或警告信息,在错误信息处双击鼠标左键,可以得到错误代码的位置。

图2-19 【Build】输出窗口编译结果
(2)【Build】菜单项
单击【Build】/【Build】菜单项,或按,只编译项目中上次修改过的文件,并链接程序生成可执行文件。若无链接错误,输出窗口如图2-20所示,否则将显示编译、链接过程中检查出来的错误或警告信息。

图2-20 【Build】输出窗口链接结果
(3)【Rebuild All】菜单项
【Rebuild All】菜单项不管项目中的源文件是否作过修改,都会编译并链接所有源文件。如果以前没有作过编译操作,会自动调用【Rebuild All】操作,依次编译并链接每一个资源文件、源程序文件。
单击【Build】/【Execute】菜单项,或按组合键 +
,或单击工具栏上的
按钮,都可以完成从编译、链接到执行应用程序的整个过程。
4. 调试
Visual C++ 6.0集成开发环境除提供编写代码、编译运行程序的功能之外,还提供了对程序的调试功能。
调试命令为菜单栏中【Build】主菜单下的【Start Debug】菜单项,如图2-21所示。

图2-21 【Build】菜单的【Start Debug】子菜单
【Start Debug】菜单项中有【Go】、【Step Into】、【Run To Cursor】及【Attach to Process】菜单命令。表2-4列出了这些命令的含义。
表2-4 Start Debug菜单命令

调试开始后,动态【Debug】菜单就会出现,它将替代菜单栏原有的【Build】菜单,如图2-22所示。

图2-22 【Debug】菜单
源代码窗口中的黄色箭头指向当前执行位置。动态【Debug】菜单中的基本菜单命令可以控制程序执行,如表2-5所示。
表2-5 控制程序执行的Debug基本菜单命令

除了上述基本菜单命令外,【Debug】菜单还包括一些附加菜单命令,其名称和作用如表2-6所示。
表2-6 Debug菜单的附加菜单命令

5. 断点设置
在Visual C++ 6.0集成调试环境中,可以设置从简单到复杂的各种断点。在Edit主菜单下选择【Breakpoints】菜单项后,系统显示一个【Breakpoints】对话框,如图2-23所示。

图2-23 【Breakpoints】对话框
可以看到,【Breakpoints】对话框中包含了三个选项卡:【Location】选项卡、【Data】选项卡和【Messages】选项卡,分别对应三种设置断点方式:按位置设置、按表达式的值设置、按窗口消息设置。
【Location】选项卡用于设置位置中断。这种无条件断点是最常用,也是默认的断点类型。程序执行时一旦遇到这种断点,只是简单地停下来。这时,程序员可通过Watch和Variables窗口查看当前变量的值。之后,可以继续执行后面的程序,直到下一个断点或程序的结束处。
在【Breakpoints】对话框中,用户可在【Break at:】编辑框中输入需要设置断点的行号、内存地址、函数名等。在此编辑框的右边有一个下拉列表框的箭头,它包含了当前的行号。选择一个行号,表示在行号所在位置处设置一个断点。
程序员也可以根据表达式的值,来决定在某个断点处是否停止程序的执行。这需要在【Data】选项卡中设置,如图2-24所示。

图2-24 【Data】选项卡
【Enter the expression to be evaluated:】下有一个编辑框,在其中可以键入一个变量或者一个表达式,以决定调试器是否在断点处停止执行。如果是布尔表达式,表达式的计算结果可以为真或为假,则程序在此表达式的计算结果为真的地方停下来;如果是非布尔表达式,例如:“(x-y)/c*d”,则程序在执行过程中,发现该表达式的结果发生变化时,就停止执行。
针对消息设置断点是Windows程序所特有的。单击【Messages】选项卡,如图2-25所示。

图2-25 【Messages】选项卡
程序员可以定义一个、一类或者几类消息作为中断的条件。当期望的消息到达时,程序会停止在指定的Windows的回调函数处。在【Break at WndProc:】下拉列表框中程序员可以键入或选择一个想设置中断的窗口函数名。在【Set one breakpoint for each message to watch:】列表框中程序员可以输入或选择一个要中断的消息。
上述三种断点,均可以在满足条件的情况下,暂停程序的执行,以便程序员调试程序或观察变量的值。
6. Variables窗口
进入调试后,系统会自动打开Variables窗口和Watch窗口,用于观察变量的值。在Variables窗口的最上面,有一个【Context】下拉列表,用于指定当前变量的显示范围。在Variables窗口的底部,分别是【Auto】选项卡、【Locals】选项卡和【this】选项卡。
【Auto】选项卡按字母顺序显示当前断点语句行和前面语句行中的变量的信息。如果断点所在行包含多条语句,则【Auto】选项卡最多显示10条语句的变量。如果窗口中包含有数组、对象或结构变量,在变量名字的左边会显示一个小按钮,可查看变量的全部或轮廓。当展开变量的内容时,此按钮是“-”,否则为“+”。
【Locals】选项卡主要显示当前函数内所有局部变量的名称、值或类型。程序运行遇到新变量时,会自动将新变量添到【Locals】选项卡中。
【this】选项卡用于显示this指针的类型、名字和值。
在Variables窗口的右边是Watch窗口,有【Watch1】、【Watch2】、【Watch3】和【Watch4】四个选项卡。程序员可根据需要在每个选项卡中输入任意的变量和表达式,观察它们的值。
以“exam1_1”为例:在Watch1窗口中,输入“num[9]”,则Value窗口显示“20”;当输入“sum= =63”时,Value窗口显示“0”,表示对此语句的否定。Watch窗口如图2-26所示。

图2-26 Watch窗口的显示
执行到断点,需要继续运行有两种方式:
①单步执行:按,每次只向前运行一个语句行。
②继续执行:想快速运行到下一个断点位置,按。
在exam1_1中,按,程序运行到第二个断点处停下,如图2-27所示。

图2-27 程序在第二个断点暂停时的显示
Variables窗口内容可以反映程序运行的状态变化、变化结果正确与否、程序出错位置等重要信息。
2.2.5 联机帮助文件
Visual C++ 6.0集成开发环境提供的联机帮助文件包括程序员指南(Visual C++Programmer’s Guide)、用户指南(Visual C++ User’s Guide)、引导教程(Visual C++Tutorials)、MFC和模板说明(MFC and Templates)、语言和库(Languages and Libraries for Visual C++)。
读者可以通过两种方式使用联机帮助文件:
■ 单击菜单栏中的【Help】/【Contents】菜单项,进入帮助系统;
■ 在源文件编辑器中,将光标停在一个需要查询的单词处,按 键,进入帮助系统。
Visual C++ 6.0的联机帮助系统采用了读者熟悉的HTML浏览器界面,如图2-28所示。单击“搜索”选项卡,输入待搜索的单词,联机帮助系统将在本机安装的所有帮助文件中进行全文搜索。如果程序员希望缩小搜索范围,可以通过“活动子集”下拉列表框选定范围。

图2-28 Visual C++ 6.0的帮助界面