3.39k likes | 3.59k Views
Visual C++ 程序设计. ch01 Visual C++ 开发环境. 1.1 认识 Visual C++ 集成开发环境
E N D
ch01 Visual C++开发环境 1.1 认识Visual C++集成开发环境 Visual C++开发环境是一个基于Windows 操作系统的可视化、面向对象的集成开发环境(Integrated Development Environment,IDE)。在该环境下用户可以开发有关C 和C++的各种应用程序,应用程序包括建立、编辑、浏览、保存、编译、链接和调试等操作,这些操作都可以通过单击菜单选项或工具栏按钮来完成,使用方便、快捷。它还提供了项目工作区(WorkSpace)、应用程序向导(AppWizard)、类操作向导(ClassWizard)和WizardBar等实用编程工具。
Visual C++的主窗口 图1.1Microsoft Visual C++开发环境
1.1.2 工程与项目工作区 在Visual C++集成开发环境中,把实现程 序设计功能的一组相互关联的C++源文 件、资源文件以及支撑这些文件的类的集 合称为一个工程。工程是Visual C++IDE 开发程序的基本单位,一个工程至少包含 一个工程文件,工程文件的扩展名为.dsp。
Visual C++IDE 以项目工作区来组织应用程序的工程,项目工作区文件的扩展名为.dsw,这种类型的文件在Visual C++中级别是最高的。项目工作区含有工作区的定义和工程中所包含文件的所有信息。所以,要打开一个工程,只需打开对应的项目工作区文件(*.dsw)即可。 项目工作区窗格一般位于屏幕左侧,包含ClassView(类视图)、ResourceView(资源视 图)及FileView(文件视图)3 种视图。
1. ClassView ClassView 用于显示工程中定义的类。展开文件夹将显示工程中所有的类,包括系统 生成的和用户自定义的。单击类名左边的“+”,就可以看到类的数据成员和成员函数, 如图1.2 所示。我们可以看到,在ClassView 中使用了各种各样的图标,它们被用来标识 类、类成员和工程中的其他项,图1.3 给出了这些图标的含义。
图1.2 ClassView 视图 图1.3 ClassView 各图标含义
2. ResourceView ResourceView 用于显示工程中所包含的资源文件。展开文件夹可显示所有的资源类 型,如图1.4 所示。显示的资源类型包括 Accelerator(加速键)、 Dialog(对话框)、Icon(图标)、 Menu(菜单)、StringTable(串表)、 Toolbar(工具条)、Version(版本)等。 双击底层某个图标或资源文件名, 可以打开相应的资源编辑器。 图1.4 ResourceView 视图
3. FileView FileView 用于显示所创建的工程。展开文件夹后可以看到工程中所包含的文件,如图 1.5 所示。除了查看,还可以管 理文件,包括增加、删除、移动 、重命名和复制文件等。单击文 件类型左边的“+”可看到工程中该 种类型的所有文件,双击一个文 件即可打开该文件。一个应用程 序工程主要包含实现源文件(*.cpp) 、头文件(*.h)和资源文件(*.rc)等 文件类型。 图1.5 FileView 视图
1.2 集成开发环境的菜单栏 Visual C++ IDE 中的菜单栏由File、Edit、View、Insert、Project、Build、Tools、Window 和Help 9 个主菜单组成,如图1.6 所示。每个主菜单又由多个菜单项和子菜单组成。菜单 项提供的功能几乎可以完成Developer Studio 的所有功能。 图1.6 Visual C++IDE 的菜单栏
1.2.1 File 菜单 File 菜单主要包括一些与文件有关的操作命令,其中的主要菜单项、快捷键及其功能见表1-1。 表1-1 File 菜单中主要菜单项和功能
1.2.2 Edit 菜单 Edit 菜单主要包括一些与文件编辑有关的操作命令,它的作用在于为用户提供了一种 编辑当前打开文件的手段。Edit 菜单中的主要菜单项、快捷键及功能见表1-2。 表1-2 Edit 菜单中菜单项和功能
1.2.3 View 菜单 View 菜单中的菜单命令项主要用于改变窗口的显示方式和激活指定的窗口。它的作用在于让用户设置窗口的显示方式,并提供观察调试的窗口。View 菜单中的主要菜单项、快捷键及其功能见表1-3。 表1-3 View 菜单中主要菜单项和功能
1.2.4 Insert 菜单 Insert 菜单主要包括一些与添加有关的操作命令,用于向工程中插入类、资源、对象等。Insert 菜单中的主要菜单项、快捷键及其功能见表1-4。 表1-4 Insert 菜单中主要菜单项和功能
1.2.5 Project 菜单 Project 菜单主要包括一些与工程管理有关的操作命令。Project 菜单中的主要菜单项、快捷键及其功能见表1-5。 表1-5 Project 菜单中主要菜单项和功能
1.2.6 Build 菜单 Build 菜单主要包括一些与建立可执行程序有关的操作命令,可以提供编译、链接、调试等功能。Build 菜单中的主要菜单项、快捷键及其功能见表1-6。 表1-6 Build 菜单中菜单项和功能
1.2.7 Tools 菜单 Tools 菜单中的菜单命令主要用于启动Visual Studio 实用工具和定制Visual C++IDE 界面。Tools 菜单中的主要菜单项及其功能见表1-7。 表1-7 Tools 菜单中菜单项和功能
1.2.8 Window 菜单 Window 菜单主要包括一些与窗口显示有关的操作命令。Window 菜单中的主要菜单项及其功能见表1-8。 表1-8 Window 菜单中主要菜单项和功能
1.3 集成开发环境的工具栏 Visual C++ IDE 的工具栏以停靠窗口的形式出现,工具栏的位置可以通过鼠标拖曳的 方法来改变,并可以根据需要在显示与隐藏之间进行切换。一般的方法是执行Tools 菜单 中的Customize 菜单命令,打开Customize 对话框,然后单击Toolbars 标签,如图1.7 所示。也可以在菜单栏或工具栏的空白处单击鼠标右键,然后在一个弹出式菜单中选择要显示或隐藏的工具,如图1.8所示。
图1.8 在弹出菜单中设置工具栏 图1.7 在定制对话框中设置工具栏 如果要恢复工具栏或菜单栏到系统原来的默认状态,则在Customize 对话框中单击Reset 或Reset All 按钮即可。
1.3.1 Standard 工具栏 Standard 工具栏中包括一些与文件和编辑有关的常用操作命令,每个按钮的功能与文 件(File)、编辑(Edit)和查看(View)等主菜单中的某个菜单项对应。图l.9 给出了Standard 工 具栏的一般形式。Standard 工具栏按钮从左到右依次对应的菜单项为:New Text File、Open、Save、Save All、Cut、Copy、Paste、Undo、Redo、Workspace、Output、Window List、Find In Files、Find、Search。 图1.9 Standard 工具栏
1.3.2 Build MiniBar 工具栏 Build MiniBar 工具栏中主要包括了工程的选择、编译、链接和调试等操作命令,每个按钮的功能与编译和调试菜单中某个菜单项对应。图1.10 给出了编译微型条工具栏(BuildMiniBar)的一般形式。Build MiniBar 工具栏按钮从左到右依次对应的菜单项为:Compile、Build、Stop Build、Execute、Go、Insert/Remove Breakpoint。 图1.10 Build MiniBar 工具栏
1.3.3 WizardBar 工具栏 WizardBar 工具栏可以对ClassView 和ClassWizard 中的命令进行快速访问,使类和成员函数的操作更加方便,WizardBar 会自动跟踪用户程序的上下文。它的一般形式如图1.11 所示。 图1.11 WizardBar 工具栏
WizardBar 工具栏上从左到右分别是Class List 下拉列表框、Filter 下拉列表框、Member List 下拉列表框和Action 控件。Action 控件含有一个按钮和一个下拉菜单。3 个列表框分 别确定当前的类、ID 和成员函数,Action 控件用于完成一些常用功能。单击Action 按钮 旁的下拉箭头时,可打开Action 菜单。通过选择菜单项,可执行跳到函数定义、增加消息 处理函数等操作。Action 菜单中的菜单项及功能见表1-10。
1.4 AppWizard 与ClassWizard AppWizard(应用程序向导)的作用是帮助用户一步步生成一个新的应用程序,并且自动 生成应用程序所需的基本代码。它是Visual C++提供的一个实用编程工具,用它产生C++ 源代码框架。将它与ClassWizard 一起配合使用,可大大节省用于开发应用程序的时间和 精力。
1.4.1 应用程序向导AppWizard 在Visual C++中,开发Windows 应用程序有很多方法,最简单、最方便的方法是使用应用程序向导AppWizard。在可视化开发环境下,生成一个应用程序要做的工作主要包括编写源代码、添加资源和设置编译方式。利用应用程序向导可以快速创建各种风格的应用程序框架,并可自动生成程序通用的源代码,这样大大减少了手工编写代码的工作量,使程序员能把精力放在具体应用代码的编写上。启动Visual C++,进入Visual C++IDE,从File 菜单上选择New 菜单项,此时将弹出New 对话框,如图1.12 所示。该对话框有4 个选项卡,分别用于创建新的Files、Projects、Workspaces 和Other Documents。
1. Files 选项卡 单击Files 标签,弹出选项卡,选择要创建的文件类型,如图1.13 所示。如果要把新文件添加到一个已经存在的工程中,则须选择Add to Project 复选框,并选择工程名称。在File 编辑框中输入文件名称,在Location 编辑框中选择路径。
2. Projects 选项卡 Projects 选项卡用于新建一个项目工程,工程文件中存放软件开发所需的全部信息。单击Projects 标签,弹出选项卡,如图1.12 所示。首先选择工程类型,在Project name 编辑框中输入工程名称。Visual C++自动为新工程提供一个默认目录,用户也可以选择一个目 录。如果用户要把新工程加到打开的Workspace 窗口中,须选择Add to current workspace单选按钮。否则,Visual C++将自动创建一个新Workspace 窗口来包含该工程。
3. Workspaces 选项卡 单击Workspaces 标签,弹出选项卡,如图1.14 所示。建立工作区文件用于记录用户程序开发过程中的各种信息,如打开窗口的数目、大小、工具栏的设置信息等。选择工作区类型,在Workspace name 编辑框中输入工作区名称。Visual C++自动为新工作区提供一个默认目录,用户也可以改变它。可以先创建一个空的工作区再接着创建工程,此时工作区的目录不同于它所包含工程的目录。也可以在创建工程时选中Create new workspaces,此时工作区的名称和目录与工程的名称和目录一致。
4. Other Documents 选项卡 单击Other Documents 标签,弹出选项卡。选择文档文件类型。当创建新文件时,如果要把新文件加到一个已经存在的工程中去,则须选择Add to project 复选框,并选择工程名称,在File 编辑框中输入文件名称。Visual C++自动为新文件提供一个默认目录,用户也可以自己选择目录。这里所列文件类型是指Active 文档,是由使用Active组件的程序如Microsoft Excel 或Microsoft Word 创建的。如果创建普通的文档,如源文件,应使用Files 选项卡。
1.4.2 类向导ClassWizard 利用AppWizard 生成的只是应用程序的框架,虽然可以正常地编译、运行程序,但不包含任何实质性的工作。要实现特定的功能,用户需要在相应的框架中添加自己的处理代码。利用ClassWizard 可以为它建立新类、进行消息映射、增加类的成员变量、修改已存 在的成员函数和成员变量等。单击View 主菜单下的ClassWizard 菜单项或按Ctrl+W 键,可以打开ClassWizard 对话框,如图1.16 所示。ClassWizard 由若干选项卡构成,其中Message Maps 和Member Variables 是两个最常用的标签。
1.Message Maps Visual C++中,通过ClassWizard 管理消息映射,用户只需编写处理消息的函数,并在用户的类中增加一个消息映射即可。Message Maps 用于管理消息和成员函数之间的连接。 其中的选项可以让用户进行加进消息响应函数、删除成员函数以及对成员函数进行编辑等操作。Message Maps 选项卡如图1.16 所示。各选项的功能如下。 Projcet:指出当前工程名称。 Class name:显示当前的类名,要将消息处理函数映射为哪个类的成员函数,就在这里选择哪个类。 Object IDs:表示当前所选中对象的ID 号,包括能产生消息的菜单项、对话框控件。 表中的首项总是当前的类名。所有可接收消息对象的ID 都被列了出来。
Messages:在Object IDs 列表框中单击,选中其中的一个ID, Messages 列表框中就会显示与之关联的消息列表。粗体字的消息表示已有消息处理函数。 Member functions:列出当前类中已包含的成员函数。V 表示是虚函数,W 表示是Windows 的消息响应函数。 Add Class:用于向工程中添加一个新类。 Add Function:用于向Member functions 框中加入一个新的消息响应函数,新增的成员函数用来响应Messages 框中当前所选中的消息。 Delete Function:用于删除Member functions 列表框中所选中的函数。但此时只在头文件中删除了函数声明,在源文件中删除了消息映射项,实际的函数代码则必须由用户自己手工删除;否则,编译时会给出出错信息。 Edit Code:用于打开Member functions 框中所选中的函数并进行编辑。
2.Member Variables MFC 提供了控件类,通过Member Variables 在控件所属的对话框类中映射一个控件对象,通过调用控件类的方法可以方便地操作控件对象。Member Variables 选项卡如图1.17所示。 图1.17 Member Variables 标签页
Project 下拉列表框列出用户正在处理的工程文件。在Class name 下拉列表框中,可以选择对哪个类进行类成员变量编辑。在Control IDs 列表框中,列出属于该类的控件ID。 选中控件ID,单击Add Variable…按钮,可以为这个控件映射值类型的成员变量或控件类 型的成员变量。值类型的成员变量用于数据交换,控件类型的成员变量就是一个控件类的 对象。
1.5 程 序 调 试 1.5.1 查找源程序中的语法错误 语法错误分为一般错误(error)和警告错误(warning)。当出现error 错误时将不会产生可 执行程序,而出现warning 错误时能够生成可执行程序,但程序运行时可能发生错误,严重的warning 错误还会引起死机现象。warning 错误比error 错误更难于修改,应该尽量消除warning 错误。
1.5.2 调试器 为了查找和修改程序中的逻辑设计错误,Visual C++ IDE 提供了重要的调试工具——Debug。 单击Build | Start Debug 菜单中的菜单项,可以启动Debug。Start Debug 子菜单中有 Go、Step Into、Run To Cursor 及Attach to Process 菜单项,它们的功能见表1-11。 表1-11 Start Debug 菜单中的菜单项和功能
Debug 主菜单取代Build 主菜单出现在菜单栏中,同时出现一个可停靠的调试工具栏和一些调试窗口,如图1.18 所示。将光标放在程序中的某个变量名上,它的当前值就会显示出来。在Debug 菜单上有许多菜单项可以控制程序的执行,见表1-12。 Variable 窗口用于观察和修改变量的当前值,Debug 可根据当前程序运行过程中变量的变化情况自动选择应显示的变量。用户可以在Variable 窗口的Context 下拉框选择要查看的函数,然后Debug 会在窗口中显示函数局部变量的当前值。
该窗口中有3 个标签,Auto标签中显示当前语句或前一条语句中变量的值和函数的返回值。Locals 标签中显示当前函数局部变量的名称、值和类型。this 标签以树型方式显示当前类对象的所有数据成员,单击“+”号可展开this 指针所指对象。
1.5.3 跟踪调试程序 即使源程序没有语法错误,但最后生成的可执行程序也没有像程序设计要求的那样运行,这类程序设计上的错误被称为逻辑设计错误或缺陷(bug)。跟踪调试程序是查找此类逻辑设计错误方法中最常采用的动态方法。跟踪调试的基本原理就是在程序运行过程的某一阶段观测程序的状态。而在一般情况下程序是连续运行的,所以我们必须使程序在某一点停下来。首先,我们所做的第一项工作就是设立断点;其次,再运行程序,当程序在断点设立处停下来时,再利用各种工具观测程序的状态。程序在断点停下来后,有时需要按用户要求控制程序的运行,以便进一步观测程序的流向。
1. 设置断点 利用Visual C++提供的集成调试环境,可以设置从简单到复杂的各种断点。选择Edit菜单下的Breakpoints 菜单项后,系统显示reakpoints 对话框,如图1.19 所示。由图中可以看到Breakpoints 对话框包含3 个选项卡,分别对应“按位置”、“按表达式的值”和“按窗口消息”3 种设置断点的方式。
图1.19 Breakpoints 对话框 Location 选项卡用于设置位置断点。该断点是最常用的一个无条件断点,也是默认的断点类型。程序执行时遇到这种断点,只是简单地停下来。
2. 控制程序运行 当设置完断点后,程序就可以进入Debug 状态,并按要求来控制程序的运行,其中有4 条命令:Step Over、Step Into、Step Out 和Run to Cursor。 Step Over:运行当前箭头指向的代码(只运行一条代码)。 Step Into:如果当前箭头所指的代码是一个函数的调用,则用Step Into 进入该函数并进行单步执行。 Step Out:如果当前箭头所指向的代码是在某一函数内部,用它可使程序运行至函数返回处。 Run to Cursor:使程序运行至光标所指的代码处。 我们可以通过用鼠标单击工具栏按钮或使用热键来控制程序的运行。
3. 观察数据变化 在调试过程中,用户可以通过Watch 和Variables 窗口查看当前变量的值。这些信息可以反映程序运行过程中的状态变化以及变化结果的正确与否。