C++游戏编程(txt+pdf+epub+mobi电子书下载)


发布时间:2020-09-19 05:32:06

点击下载

作者:邹吉滔,姚雷,易巧玲

出版社:清华大学出版社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

C++游戏编程

C++游戏编程试读:

前言

在所有的编程语言中,C++可以说是最为复杂的,它既是一门传统的编程语言,也是一门新的编程语言。

说它是一门传统语言,是因为C++已有20多年的历史了,特别是最近10年来C++得到了快速的发展。C++是计算机软件领域中覆盖面最为广阔的编程语言,并且,与C++相关的智力投入也是其他任何一门语言所无法比拟的。人们对于C++的研究已经远远超出了对于一门编程语言所应有的关注。所以,现在的C++已经非常成熟,有大量的资源(文档、书籍、源代码等)可供我们使用。

说它是一门新的编程语言,是因为在1998年C++由国际标准化组织ISO(International Standards Organization)完成了标准化,从此C++领域有了统一的标准。所有的编译器都将向标准靠拢(或者说,与标准兼容),这有利于我们写出可移植的C++代码来。同时C++标准也统一了C++标准库,为C++用户提供了最为基本的基础设施。C++经历了多年的发展,终于有了一个相对稳定的版本,所以,我们应该用一种新的眼光来看待C++,而不再简单地把C++认为是C语言的超集。通过本书,读者可以重新审视C++语言。

随着编程技术在我国的普及,C++语言已经为众多程序设计人员所掌握,相关的书籍也层出不穷,但是现在国内IT企业拥有学士、硕士、博士文凭的软件开发人员比比皆是,可由于他们在接受大学教育时就没有对软件开发工作中有关的质量属性(如正确性、健壮性、可靠性、效率、易用性、可读性(可理解性)、可扩展性、可复用性、兼容性、可移植性等)进行深入的分析和探讨,并且在实践中运用相关的技术。“高质量”可不是通过读书就能学会的,那需要长期的实践工作以及对工作的成败进行不断的总结,才能实现!

因此有充分的理由疑虑:(1)编程老手可能会长期用隐含错误的方式编程(习惯成自然),发现毛病后都不愿相信那是真的!(2)编程高手可以在某一领域写出极有水平的代码,但未必能从全局把握软件质量的方方面面。

事实证明确实如此。大多数“老”程序员的编程技能,质量合格率大约是10%。很少有人能够写出完全符合质量要求的代码,很多程序员对指针、内存管理一知半解。

在这样的前提之下,笔者斗胆试着把工作中的一些经验心得以及从无数个前辈那里学到的知识整理出来,编写一本C++的基础教学用书,不指望能够把C++的知识全部说出来,只希望让初学者能够很快看到C++知识基础面貌以及编程的基本方法和风格。本书的一个重要特点是在讲解一些重要知识点的时候,用同一个例子进行说明,通过不断的升级改造同一例程,来说明不同知识点的运用技巧,这些例子主要是在游戏程序设计中用到的一些基础程序,因此对有志作为游戏程序设计者的帮助尤其显著。

本书主要分为3个部分,第一部分为C++语言的基础语法部分,主要用来讲述语法知识以及程序的基本结构,运算符、数组、函数、预处理等知识。这部分知识中,有关内存处理部分,需要读者认真体会,第二部分是本书的真正重点,主要讲述面向对象编程技术,这部分的知识,主要通过几个贯穿这部分始末的例子来描述,其中一个重要的例子是一个简单的栈设计及应用,讲解不同知识点的时候,将利用相关的知识点对栈进行升级改造,读者可以充分体会到每个知识点在什么情况下运用可以发挥更大的作用。另外一部分重要的例子是如何在游戏程序设计中利用面向对象编程技术,可以通过设计游戏中的精灵类,来理解面向对象技术的强大作用。本书的第三部分,不作为重点进行讲述,但仍然需要读者认真学习,第三部分主要讲述标准模板库的应用。

本书由邹吉滔,姚雷,易巧玲编著。由于各方面的原因,书中疏漏之处在所难免,恳请广大读者批评指正。编者第1章概观程序设计本章内容:● 计算机程序发展历程。● 程序设计思想变迁史。

重点:

面向对象编程思想。

目的:

了解程序设计发展史。1.1 程序设计发展历程1.1.1 什么是计算机程序

自1946年世界上第一台电子计算机问世以来,计算机科学及其应用的发展十分迅猛,计算机被广泛地应用于人类生产、生活的各个领域,推动了社会的进步与发展。特别是随着国际互联网(Internet)日益深入千家万户,传统的信息收集、传输及交换方式正被革命性地改变,人类已经难以摆脱对计算机的依赖,计算机已将人类带入了一个新的时代——信息时代。

一台计算机是由硬件系统和软件系统两大部分构成的。硬件是计算机的物质基础;而软件可以说是计算机的灵魂,没有软件,计算机只是一台“裸机”,什么也不能干,有了软件,才能灵活起来,成为一台真正的“电脑”。而所有的软件,都是使用计算机语言编写出来的。

软件程序是控制计算机完成特定功能的一组有序指令的集合,编写程序所使用的语言称为程序设计语言。电脑所做的每一次动作,每一个步骤,都是按照已经用计算机语言编好的程序来执行的。程序是计算机要执行的动作的集合,而程序全部都是用程序设计语言来编写的。所以人们要控制计算机一定要通过计算机语言向计算机发出命令。程序设计语言经历了机器语言、汇编语言到高级语言的多个阶段。

随着计算机技术的不断进步和计算机图形技术的发展,计算机程序提供了对现实世界越来越逼真的模拟,在这种情况下一种新的计算机程序出现了,这种程序的目的不再是为了计算复杂的弹道数据,或是模拟宇宙的演化,它只是为了一个简单的目标:娱乐。就这样,电子游戏产生了,同时也产生了游戏程序员。

游戏程序员的程序设计能力决定着他能为游戏策划实现哪些功能,能做出什么样的游戏,可以说程序员的水平决定了游戏的成败。对于游戏程序员而言,掌握一门高级语言及其基本的编程技能是必需的。不仅如此,作为专业技术人员,除了掌握本专业系统的基础知识外,科学精神的培养、思维方法的锻炼、严谨踏实的科研作风的养成,以及分析问题、解决问题的能力的训练,都是日后工作的基础。学习计算机语言,正是一种十分有益的训练方式,而语言本身又是与计算机进行交互的有力工具。1.1.2 计算机程序语言的发展历史

计算机程序设计发展的历史,也就是计算机程序设计语言的发展历史,它经历了从机器语言、汇编语言到高级语言的历程。

1. 机器语言

电子计算机所使用的是由“0”和“1”组成的二进制数,二进制是计算机的语言基础。在计算机发明之初,计算机所能识别的语言只有机器语言,即由0和1构成的代码。所以人们只能放弃自己的自然语言,用计算机的语言去命令计算机干这干那儿,也就是写出一串串由“0”和“1”组成的指令序列交由计算机执行,这种语言就是机器语言。

使用机器语言是十分痛苦的,特别是在程序有错需要修改时更是如此。而且,由于每台计算机的指令系统往往各不相同,所以,在一台计算机上执行的程序,要想在另一台计算机上执行,必须另编程序,这就造成了重复工作。但由于使用的是针对特定型号计算机的语言,且不需要经过翻译、编译等过程,而是直接执行的,故而它的运算效率是所有语言中最高的。机器语言,是第一代计算机语言。

2. 汇编语言

为了减轻使用机器语言编程的痛苦,提高程序开发的效率,人们进行了一种有益的改进:用一些简洁的英文字母、符号串来替代一个特定指令的二进制串,比如,用“ADD”代表加法,“MOV”代表数据传递等。这样一来,人们就比较容易读懂并理解程序在干什么,纠错及维护都变得方便了,这种程序设计语言就称为汇编语言,即第二代计算机语言。然而计算机是不认识这些符号的,这就需要一个专门的程序,专门负责将这些符号翻译成二进制数的机器语言,这种翻译程序被称为汇编程序。

汇编语言同样十分依赖于机器硬件,移植性不好,但效率仍十分高,针对计算机特定硬件而编制的汇编语言程序,能准确发挥计算机硬件的功能和特长,程序精练而质量高,所以至今仍是一种常用且强有力的软件开发工具。

3. 高级语言

从最初与计算机交流的痛苦经历中,人们意识到,应该设计一种这样的语言,这种语言接近于数学语言或人的自然语言,同时又不依赖于计算机硬件,编出的程序能在所有机器上通用。经过不懈的努力,在1954年,第一个完全脱离机器硬件的高级语言——FORTRAN问世了,40多年来,共有几百种高级语言出现,有重要意义的有几十种,影响较大、使用较普遍的有FORTRAN、ALGOL、COBOL、BASIC、LISP、SNOBOL、PL/1、Pascal、C、PROLOG、Ada、C++、Delphi和Java等。

高级语言的发展也经历了从早期语言到结构化程序设计语言,从面向过程到面向对象程序语言的过程。相应的,软件的开发也由最初的个体手工作坊式的封闭式生产,发展为产业化、流水线式的工业化生产。

过去的软件生产基本上是以个人为单位进行开发,缺乏科学规范的系统规划与测试、评估标准。当这样的工作方式应用于大型软件的开发时,恶果是大批耗费巨资建立起来的软件系统,由于含有错误而无法使用,甚至带来巨大损失,软件给人的感觉是越来越不可靠,以致几乎没有不出错的软件。这一切,极大地震动了计算机界,史称“软件危机”。人们认识到:大型程序的编制不同于写小程序,它应该是一项新的技术,应该像处理工程一样处理软件研制的全过程。程序的设计应易于保证正确性,也便于验证正确性。1969年,荷兰计算机科学家迪克斯特拉(E.W.Dijkstra)提出了结构化程序设计方法;1970年,第一个结构化程序设计语言——Pascal语言出现,标志着结构化程序设计时期的开始。

从20世纪80年代初开始,在软件设计思想上又产生了一次革命,其成果就是面向对象的程序设计思想。在此之前的高级语言,几乎都是面向过程的,程序的执行如同流水线似的,在一个模块被执行完成前,人们不能干别的事,也无法动态地改变程序的执行方向,这和人们日常处理事物的方式是不一致的。对人而言,希望发生一件事就处理一件事。也就是说,不是面向过程,而应是面向具体的应用功能,也就是对象(Object)。其方法就是软件的集成化,如同硬件的集成电路一样,生产一些通用的、封装紧密的功能模块,称之为软件集成块,它与具体应用无关,但能相互组合,完成具体的应用功能,同时又能重复使用。对使用者来说,只需关心它的接口(输入量、输出量)及能实现的功能,至于是如何实现的,那是它内部的事,使用者完全不用关心,C++、Delphi就是这种语言的典型代表。

随着技术的不断进步,高级语言的下一个发展目标是面向应用,也就是说,只需要告诉程序你要干什么,程序就能自动生成算法,自动进行处理,这就是非过程化的程序语言。1.2 程序设计思想1.2.1 结构化程序设计思想

结构化程序设计(Structured Programming,SP)的思想是由荷兰学者E.W.Dijkstra提出的,它规定了一套方法,使程序具有合理的结构,以保证和验证程序的正确性。这种方法要求程序设计者不能随心所欲地编写程序,而是要按照一定的结构形式来设计和编写程序。它的一个重要目的是使程序具有良好的结构,使程序易于设计,易于理解,易于调试修改,以提高设计和维护程序工作的效率。

结构化程序设计是E.W.Dijkstra等人在研究人的智力局限性随着程序规模的增大而表现出不适应的特点之后,于1969年提出的一种程序设计方法,这是一种在解决复杂问题时避免混乱的技术。它提出了把程序结构规范化的主张,要求对复杂问题的求解过程应按人们大脑容易理解的方式进行组织,而不是强迫人们的大脑去接受难以忍受的冲击。具体来说,结构化程序设计的思想包括以下三方面的内容。● 程序由一些基本结构组成。任何一个大型的程序都由三种基本结

构所组成,由这些基本结构顺序地构成一个结构化的程序。这三

种基本结构为:①顺序结构,如图1-1所示;②选择结构(亦称

分支结构),如图1-2所示;③循环结构,如图1-3所示。图1-1 顺图1-2 选择结构图1-3 循环结构序结构

同时结构化定理还进一步表明,任何一个复杂问题的程序设计都可以用顺序、选择和循环这三种基本结构组成,且它们都具有以下特点:只有一个入口;只有一个出口;结构中无死循环。程序中三种基本结构之间形成顺序执行关系。● 一个大型程序应按功能分割成一些功能模块,并把这些模块按层

次关系进行组织。● 在程序设计时应采用自顶向下、逐步细化的实施方法。

用八个字来描述结构化程序设计的基本思想就是:自顶向下,逐步求精。“自顶向下”是将大而复杂的问题划分为多个小问题,找出问题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。“逐步求精”是将现实世界的问题经抽象化处理转化为逻辑空间或求解空间的问题;复杂问题经抽象化处理变为相对简单的问题。经若干步抽象(精化)处理后,最后到求解域中的只是比较简单的编程问题。

在这个“自顶向下、逐步求精”的细化过程中,要对系统功能逐层分解出许多易于理解和实现的、逻辑上相对独立的子功能,形成一棵功能树。在程序实现时,功能树上的每一个结点对应一个函数。一个C程序是由一到多个函数组成;一个C++程序不但可以包含多个函数,而且还可以包含多个类,而一个类就包含一到多个成员函数。

按结构化程序设计方法设计出的程序优点是:结构良好、各模块间的关系清晰简单、每一模块内都由基本单元组成。这样设计出的程序清晰易读、可理解性好、容易设计、容易验证其正确性,也容易维护。同时,由于采用了“自顶向下、逐步细化”的实施方法,能有效地组织人们的智力,有利于软件的工程化开发。1.2.2 面向对象程序设计思想

随着计算机技术的不断发展,其软硬件之间的差距越来越大,这就造成了计算机发展的不均衡。当系统较为复杂时,常规的软件工具、技术和概念已不足以应付,从而使软件开发陷入了困境,即所谓的“软件危机”。尽管软、硬件发展的这种差距自计算机出现以来始终存在,但进入20世纪90年代后这种差距更加明显。在这一背景下,面向对象(Object-Oriented Programming,OOP)程序设计技术逐渐兴起,而C++这种最为优秀的面向对象语言也应运而生,随着它的不断完善,其逐步进入实用阶段并受到广大软件开发者的青睐,吸引了众多的人士去研究和使用它。而面向对象的思想也在软件工程、人工智能等领域得到了十分广泛的应用。面向对象的程序设计语言的出现是计算机软件产业的一次革命。

1. 面向对象程序方法的基本思想及对象的含义

面向对象程序设计方法的基本思想是:认为世界由各种对象组成,任何事物都是对象,是某个对象类的实例;复杂的对象可以由比较简单的对象以某种方式组成。按照这个观点,整个世界也可以从一些最原始的对象开始,经过层层组合而成。因此,可以说整个世界就是一个最复杂的对象。

在面向对象程序设计中,对象是系统中的基本运行实体,是有特殊属性(数据)和行为方式(方法)的实体。即对象由两个元素构成:一组包含数据的属性和允许对属性中包含的数据进行操作的方法。也可以说,对象是将某些数据代码和对该数据的操作代码封装起来的模块。

对象包含了数据和方法,每个对象就是一个微小的程序。由于其他对象不能直接操纵该对象的私有数据,只有对象自身的方法才能得到它,这就使对象具有很强的独立性,因此可把对象当作软件的基本组件。在面向对象的程序设计中,可使用若干对象来建立所需要的各种复杂的应用软件,即通过对象组合,创建具体的应用。

因此,把所有对象都划分成各种对象类,对每个对象类都定义一组方法。所谓方法实际上是允许施加于该类对象上的各种操作。对象和传统的数据有本质区别,它不是被动地等待对其执行某种操作;相反,它是进行处理的主体,必须发送消息请求对象执行它的某个操作,处理它的私有数据,而不能从外界直接对它的私有数据进行操作。对象之间除了互相传递消息的联系之外再没有其他联系。一切局部对象的信息和实现方法,都被封装于相应的对象类的定义之中,在外界是不可见的。

2. 面向对象程序设计语言的特性

面向对象程序设计语言中最为精彩的是它的三大特性:封装性(Encapsulation)、继承性(Inheritance)和多态性(Polymorphism)。

1) 封装性

封装就是将对象的属性和方法封装到具有适当定义接口的容器中。对象接口提供的方法和属性应使对象能够如期使用。封装的功能取决于两个重要概念:模块化和信息隐藏。模块化是对象的自给自足的特性,它不会访问定义接口以外的其他对象。信息隐藏是指将对象暴露的信息限制在对象接口的使用所必需的范围内,删除对象中仅供对象内部操作的信息。

封装是一种信息隐蔽技术,用户只能见到对象封装界面上的信息,对象内部对用户是隐蔽的。封装的目的在于将对象的使用者和设计者分开,使用者不必知道行为实现的细节,只需用设计者提供的消息来访问该对象即可。

2) 继承性

对象类按照类、子类与父类的关系构成了一个层次结构的系统。在这种层次结构中,上层对象类所具有的性质可以被下层对象类继承,除非在下层对象类中又对相应的属性重新作了描述,这时将以新属性为准。也就是说,低层的属性将屏蔽高层的同名属性,这种特性称为对象类之间的继承。继承是实现软件重用的重要机制。

继承是从一种对象类型构造另一种对象类型的一个主要方法。利用继承性,可以在已经定义的对象类型基础上创建更复杂、更专业的对象类型,只要加进所需的属性和方法,将新对象与上级对象区别开来即可。继承性是自动的共享类、子类和对象中的方法和数据的机制,合理使用继承可以减少很多的重复劳动。如果某个类实现了一个特别的功能,那么它的派生类就可以重复使用这些功能,而不需要再重新编程。

3) 多态性

所谓多态是指一个名字可具有多种语义,多态引用表示可引用多个类的实例。多态可为一种对象类定义一种方法的多种实现方案,这些方法是通过类型和可接收的参数来区分而加以使用的。

多态性可使公共的信息传送给基类对象及所有的派生类对象,允许每一个基类对象按适合于其定义的方式响应信息格式。

多态性有时也指方法的重载。方法的重载是指同一个方法(即函数)名在上下文中有不同的含义,是实现重载的类以统一的方式处理不同数据类型的一种手段。它是静态的,这是因为在实现类编写方法之前需要考虑将要遇到的所有数据类型。子类在动态运行时提供了更丰富的多态性。

对象的以上这些特性使它具有很强的可重用性。用户在开发应用程序时,可以调用系统中的各种对象,作为自己应用程序的基本组件,这样就使新增代码明显减少,而且增加了程序的可靠性和可维护性。

3. 面向对象程序设计存在的问题

面向对象程序设计技术确实提供了与真实世界较为接近的模型,为提高软件开发生产率提供了诱人的前景,然而面向对象程序设计技术不是万能的,作为一种新兴的技术在实现上还存在着某些缺陷,归纳起来主要有以下几个方面的问题。

1) 运行效率问题

面向对象程序设计技术是针对当前的软件开发危机而产生的,它在提高编程效率方面所起的作用是毋庸置疑的,但是在运行时,用面向对象技术开发的程序通常较用过程化方法开发的程序的效率要低,虽然随着CPU速度的提高、内存容量的增加,对一般规模的面向对象系统其运行速度用户是可以接受的,但当系统规模较大时,这一问题不容忽视。

2) 类库的化简问题

面向对象程序设计语言通常都提供了一个具有丰富功能的类库,用户可以有选择地使用它们进行程序开发,从而缩短软件开发生命周期。要成为一名高效的面向对象程序员必须能熟练地运用类库,掌握类库中各个类提供的功能,但由于类库都过于庞大,程序员对它们的掌握要有一个时间过程,从普及、推广的角度,类库应在保证其功能完备的基础上进行相应的缩减。

3) 类库的可靠性问题

虽然类库中提供的类都是经过精心设计和测试过的,但如此庞大的系统谁也无法保证类库中的每个类在各种环境中都能百分之百的正确。如果应用程序中使用了类库中某个存在问题的类,当经过几层继承后错误才显现出来,这时程序员对此将束手无策,有可能要推翻原来的全部工作,虽然这种情况出现的概率很低,但国外确曾有过这方面的报道。

以上谈及的这些问题,不应该成为阻碍面向对象技术发展的障碍,随着软、硬件技术的发展及面向对象技术自身的完善,必将会给软件开发技术、观念带来革命性的转变,使软件生产进入一个新的时代。本章小结

本章概要地介绍了程序设计的基本概念以及程序设计的发展历程,明确指出了目前流行的程序设计思想为面向对象编程思想。第2章开发环境简介

本章内容:● Visual C++ .NET的菜单组成。● Visual C++ .NET开发管理方式。● Visual C++ .NET支持的资源。● Linux下的开发环境配置及程序开发方法。

重点:

解决方案管理与代码编写。

目的:

掌握利用各种开发环境编写C++程序的流程。2.1 Visual Studio .NET集成开发环境

Visual Studio .NET 2008是Microsoft的新一代开发工具,用于构建和部署功能强大而安全的Windows平台应用软件,它是Microsoft Windows环境下的一个支持可视化编程的集成开发环境(Integrated Development Environment,IDE),通常称为开发平台。集成开发环境是一个集成程序编译器、调试工具和建立应用程序工具的主体。

作为Visual Studio .NET 2008的核心组件,Visual C++ .NET 2008集成了开发C++和C应用程序所需要的所有工具和C++编译器,是一个完善的C++程序开发平台。Visual C++ .NET 2008可以用来管理项目、生成和编辑程序源文件、设计程序资源(如菜单、对话框与图标等)和产生程序的基本框架及一些源代码,可以在Visual C++ .NET 2008中直接建立和调试程序,还可以检查和管理程序符号与C++类,访问Visual C++ .NET 2008联机帮助,使用Help菜单命令等。

微软公司在推出这一款继承开发工具时,为了达到更高的效率,将4种语言:Visual Basic、Visual C#、Visual C++和Visual J#集成到了统一开发环境中。如果用户只需要使用Visual C++部分的内容,在进行Visual Studio .NET 2008的安装时可以选择只安装Visual C++ .NET 2008组件,对于选择安装全部语言组件的Visual Studio .NET 2008的用户来说,在菜单中可以通过选择操作,执行不同语言的编译任务。

由于Visual C++ .NET 2008是一个可视化的开发工具,所以开发过程多数表现为单击鼠标按钮和拖放图形化对象以及设置对象的属性、行为的过程。这种可视化的编程方法易学易用,所见即所得,可以提高工作效率。

当启动Visual C++ .NET 2008后,可以看到它提供的IDE环境如图2-1所示。图2-1 Visual C++ .NET 2008集成开发环境

从图2-1中可以看到,Visual C++ .NET 2008的IDE界面和传统的Windows程序界面一样,包含菜单栏、工具栏以及状态栏等。但IDE界面还有重要的三大部分;Solution Explorer(解决方案资源管理器)窗口、Workspace(工作区)和Output(输出)窗口。这些基本界面元素相互配合,形成了具有Visual C++ .NET 2008特色的IDE环境。下面简单介绍一下创建项目的步骤。2.1.1 创建项目

菜单栏提供了Visual C++ .NET 2008几乎所有的命令。通过这些命令,可以访问到Visual C++ .NET 2008的大部分功能。除了提供标准的File、Edit、View、Window和Help菜单外,Visual C++ .NET 2008还提供了编辑专用的功能菜单,如Project、Tools、Build和Debug等。

File(文件)菜单的各个命令主要用于完成文件的建立、保存、打开、关闭以及打印等工作。其中最常用的命令是New(新建)。

在File菜单中使用鼠标选择New命令会出现3个子选项,如图2-2所示,3个子选项分别用于实现如下三种功能。图2-2 New命令菜单● Project(项目):新建项目,Visual C++ .NET 2008会为用户提

供部分类型项目的框架向导,如图2-3所示。● File(文件):新建文件,可以新建多个类型的文件。● Blank Solution(空白解决方案):新建空白解决方案。

选择New→Project命令后将打开New Project对话框,如图2-3所示。图2-3 New Project对话框

在New Project对话框的Templates列表框中选择需要创建的项目类型,然后在Name文本框中输入项目的名字和设置Location文本框中的项目存储路径,单击OK按钮就可以新建需要的项目文件,集成开发环境将会为用户生成对应类型程序的基本框架。可以创建的项目类型有:ATL COM AppWizard(Active Template Library应用程序向导)、Custom AppWizard(自定义的应用程序向导)、MFC Application(MFC应用程序)、MFC DLL(MFC动态链接库)、Win32 Project(Win32应用程序)和Win32 Console Application(Win32控制台应用程序)等。

创建完新项目后,集成开发环境将自动生成项目框架代码,并自动为项目生成对应的解决方案。解决方案是项目组织管理的单位,一个解决方案可以包括对应的多个项目。2.1.2 创建文件

选择New→File命令后,可以进入New File对话框(如图2-4所示),用户可以选择新建的文件有:Bitmap File(位图文件)、C/C++Header File(C/C++头文件)、C++Source File(C++源文件)、Cursor File(光标文件)、HTML Page(HTML页文件)、Icon File(图标文件)和Text File(文本文件)等。图2-4 New File对话框2.1.3 项目属性设置

创建完项目后,需要对项目的属性进行必要的设置,在创建大型项目的时候更是如此。

在Visual Studio主窗口左边的解决方案中,右键单击项目名称,在弹出的快捷菜单中选择“属性”命令,在弹出的对话框中可以进行多种属性设置,如图2-5所示。图2-5 项目属性设置对话框

在实际工作中,最需要经常设置的属性是附加包含目录、附加库目录、代码生成属性这三项。

展开C/C++树,在其右侧列表中,选择“附加包含目录”选项,在弹出的窗口中,选择需要的附加头文件所在的目录即可,这里可以多选,将来程序在编译期间,会按照选择的先后次序进行头文件的查找。

同样,在C/C++子树中,“代码生成”选项也很有用。当使用不同类型的函数库时,应该选择对应类型的调试项,例如若使用了单线程调试库,则这里应该选择MTD项,其他类似。

展开“链接器”树,在该树中,常用的设置项目是常规选项中的“附加库目录”选项,设置原理类似于附加包含目录,而在“输入”项目中,可以设置用户程序中使用到的第三方库,这里只要把库文件名并列地写在“附加依赖项”里即可,文件名之间用空格分隔开。2.1.4 编译和运行

当程序编辑完成后,从菜单栏中选择Build(生成)→Build Solution(生成解决方案)命令,便会进行编译和链接。在这个过程中,编译器会检查代码中的语法错误,但不会检查逻辑错误。如果一切正常,则直接生成对应的可执行程序。

当编译成功后,可以选择如图2-6所示的按钮,启动应用程序。图2-6 运行程序的按钮

编译工作的全部功能都包含在Build(生成)菜单中,其中包括用于编译、建立和执行应用程序的命令。该菜单分为三个部分,包括解决方案编译、项目编译以及编译选项的设置。Build菜单的几个常用命令介绍如下。● Build Solution(生成解决方案)命令:用于快速编译解决方案中

的所有项目文件,但是在编译解决方案时不会清理解决方案。● Rebuild Solution(重新生成解决方案)命令:用于首先清理解决

方案,然后进行重新编译。很多时候如果出现链接错误,选择该

命令进行重新编译可以编译成功。● Clean Solution(清理解决方案)命令:清理解决方案,删除原

来生成的编译文件。● Build Project(生成项目)命令:和当前处于选中状态的项目对

应,用于编译当前选中的项目。● Rebuild Project(重新生成项目)命令:和当前处于选中状态的

项目对应,用于清理并重新编译当前选中项目。● Compile(编译)命令:编译当前文件。2.1.5 调试

Debug菜单用于对完成编译的程序进行调试工作,该菜单中几个常用命令的介绍如下。● Start(启动):在调试状态启动并开始调试程序。● Start without debug(启动但不调试):启动程序但是不处于调试

状态。● New breakpoint(新断点):设置新的断点,用于进行程序调

试。● Clear All BreakPoint(清除所有断点):清除用户设置的所有断

点。● Step Into(执行至下一步):单步执行到函数内部。● Step over(单步执行):单步执行,只在当前文件下执行。2.1.6 辅助工具

1. Tools菜单

Tools菜单中的命令用于浏览用户程序中定义的符号、定制菜单与工具栏,激活常用的工具或更改选项和变量设置等。Tools菜单包括以下几个常用命令。

1) Error Lookup命令

可以使用该命令在输入值的基础上恢复一个系统错误消息或模块错误消息。如果从调试器或其他支持OLE(Object Linking and Embedding,对象链接与嵌入)的应用程序上拖动了一个十六进制数或十进制数,它将自动恢复错误消息文本。

2) ActiveX Control Test Container命令

该命令启动一个随Visual C++一起发行的测试容器(Test Container)应用程序。此程序是一个用于测试ActiveX控件的ActiveX控件容器。测试容器允许开发者通过改变控件的属性、使用其方法、激活其事件来测试其功能。

3) OLE/COM Object Viewer命令

该命令显示安装在计算机上的ActiveX控件、OLE对象以及它们支持的界面,利用它也可以编辑注册表和检查类型库。

4) Spy++命令

该命令启动一个Win32实用程序,可用于显示系统对象间相互关系的图形化表示;搜索指定的窗口、线程、进程或消息;查看选定对象的属性;从视图中直接选择一个窗口、线程、进程或消息。

5) Customize命令

该命令用于定制集成开发环境的界面,选择该命令将弹出Customize对话框,如图2-7所示,它可以对命令、工具栏、工具菜单、键盘快捷键和宏进行定制。图2-7 Customize对话框

6) Macro命令

该命令用于创建、编辑和运行宏。所谓宏就是用Visual Basic Scripting Edition语言编写的程序。正确运用宏可以简化在集成开发环境中的工作。因为在一个宏中可以结合几个命令,从而加快程序编制,或自动执行一系列复杂任务。

7) Create GUID命令

该命令用于创建唯一的全局标识符GUID。单击该命令后出现的创建对话框如图2-8所示。图2-8 Create GUID对话框

2. 工具栏

工具栏提供了对常用命令快速执行的各种手段,使用起来更加方便快捷,不必在一层一层的菜单中查找。一般来说,工具栏所提供的功能,在菜单中都有相应的命令,工具栏的命令是菜单命令的一个子集。

Visual C++ .NET 2008提供了10个不同的工具栏,分别是Standard、Build、Build Minibar、ATL、Resource、Edit、Debug、Browse、Dam6BSe和WizardBar工具栏。默认时,Standard、Build Minibar和WizardBar工具栏显示在主窗口中。

1) 定位或浮动工具栏

Visual C++ .NET 2008拥有标准工具栏(在Visual C++ .NET 2008标题栏下面可以找到)。这些工具栏可以处于固定状态或者浮动状态。

在固定状态下,工具栏被固定在应用程序窗口的任意一个边上,当工具栏被固定时就不能改变其大小了。

在浮动状态下,工具栏具有一个细的标题栏,并且可以出现在屏幕的任何地方,浮动工具栏经常处于所有窗口的最前端。当工具栏处于浮动状态时,我们可以改变它的位置和大小。

只要将固定的工具栏用鼠标拖曳到窗口中你所希望的位置,固定工具栏就会变成浮动的工具栏;双击浮动工具栏的标题栏,浮动工具栏的标题栏将返回到以前的位置变成固定工具栏。

图2-9 工具栏选择快捷菜单

为了使用工具栏,必须使工具栏出现在Visual C++ .NET 2008的主窗口中,方法是移动鼠标指向工具栏的位置,然后右击,屏幕上会弹出一个快捷菜单(如图2-9所示),单击要使用的工具栏,使其前面出现“√”,则相应的工具栏就会出现在主窗口中。同样的方法可以实现显示/隐藏工具栏。

2) 常用工具栏

下面介绍几种常用工具栏所含的各种工具的作用、用法及工具栏的定制过程。(1) Standard工具栏。

Standard工具栏含有15个工具,主要用于建立项目工作区及项目。从左至右各按钮的具体功能如表2-1所示。表2-1 Standard工具栏(2) Build工具栏与Debug工具栏。

Build工具栏与Debug工具栏含有8个工具。当用户建立好应用程序项目后,可利用这些工具对项目进行编译、连接、调试和运行。常用工具按钮的功能如表2-2所示。表2-2 Build工具栏与Debug工具栏中常用的工具按钮

3) 定制工具栏

工具栏也可以定制操作。下面以创建新的工具栏为例来介绍工具栏的定制过程,该工具栏名为“我的书签”,其中有相应的5个按钮用来管理、设置书签和书签的切换。其定制过程如下。(1) 在工具栏选择快捷菜单中选择最下方的Customize命令,打开Customize对话框,如图2-10所示。单击New按钮打开New Toolbar对话框。图2-10 Customize对话框(2) 在New Toolbar对话框中的Toolbar Name文本框中输入“我的书签”,单击OK按钮。在Visual Studio .NET 2008开发环境中,从工具栏上任意选择几个需要的工具按钮拖放到“我的书签”工具栏中,这样就创建好了“我的书签”工具栏,如图2-11所示。图2-11 “我的书签”工具栏

在Customize对话框中选择需要删除的工具栏,并单击右侧的Delete按钮,就可以删除对应的工具栏。2.1.7 解决方案资源管理器

项目是与应用程序相关的一组文件及其配置,用以生成最终的程序或二进制文件,一个应用程序对应一个项目。通过Visual C++ .NET 2008生成的应用程序其对应的项目文件则是通过解决方案来进行管理的,一个解决方案可以包含多个项目。解决方案是Visual C++ .NET 2008的一个重要组成部分,程序员的大部分工作都在Visual C++ .NET 2008中完成。Visual C++ .NET 2008使用解决方案来组织项目、元素以及确定项目信息在屏幕上出现的方式。在一个解决方案中,可以处理每一个项目和项目对应的文件。

一个解决方案可包含由不同的开发工具包生成的项目,如Visual C++和Visual Basic等。在桌面上,解决方案以窗口的方式组织项目、文件和项目设置。解决方案一般通过解决方案管理器的形式显示于屏幕右侧,如图2-12所示。解决方案管理器窗口底部有一组标签,用于从不同的角度(视图)查看解决方案管理器的各个项目。解决方案管理器显示所创建的项目中包含的文件。展开文件树可以查看项目中所包含的各类文件,包括源(.cpp)文件、头(.h)文件和资源(.rc)文件。图2-12 解决方案管理器

解决方案文件以.sln为后缀保存,项目文件以.prj为后缀保存。要打开一个项目,只需打开相应的解决方案文件即可,如果直接打开项目文件,Visual C++ .NET 2008会自动加载对应的解决方案。

解决方案管理器由视图窗口组成,每个视图窗口中都有一个相应的文件树,包含关于该项目的各种元素,展开文件树可以显示所选视图的详细信息。一个Windows应用程序的解决方案管理器一般包含图2-12所示的3种视图。● Class View(类视图):显示项目中定义的C++类。展开文件树

可以显示项目中定义的所有类,展开类可查看类的数据成员和成

员函数以及全局变量、函数和类的定义。● Resource View(资源视图):显示项目中所包含的资源文件。展

开文件树可显示所有类型的资源。● Solution Explorer(解决方案管理器):显示所创建的项目文件。

展开文件树可以查看项目中所包含的文件。2.1.8 类视图

类视图窗口将解决方案对应的项目以类的形式进行组织,展开类视图窗口中的树控件可以查看项目对应的所有类信息以及类对应的属性和方法,如图2-13所示。图2-13 类视图窗口2.1.9 文件视图

Solution Explorer视图显示解决方案、解决方案包含的项目文件和项目工作区中所包含的文件逻辑关系。一个解决方案可包含多个项目,其中有一个为活动项目,活动项目以高亮显示。

使用Solution Explorer视图可以完成查看文件、管理文件、增加文件、删除文件、移动文件、重命名文件和复制文件等工作。

要增加一个文件到项目中,可以通过右击解决方案并从快捷菜单中选择Add Existing Item子命令,从打开的文件对话框中选择相应的文件并添加;要从项目中删除一个文件,可右击需要删除的文件,然后从快捷菜单中选择Remove(移除)命令移除文件,或者通过选中要删除的文件并按Del键进行删除。注意:上述文件操作是相对项目而言的,例如,移除某文件,指的是从本项目中移除文件,而不是从磁盘上彻底删除该文件。因此还可以通过上述增加文件操作把该文件重新加入本项目。当然,如果需要从磁盘中彻底删除该文件,可从Windows系统的资源管理器中将其删除。2.1.10 资源视图

资源视图显示解决方案对应的项目所包含的资源文件,展开文件树可显示所有相关的资源。

通过对图2-3所示的New Project对话框使用Visual C++ .NET 2008的向导可以自动为所生成的应用程序生成程序资源。默认生成的资源包括:图标、菜单、快捷键、工具栏和版本信息等。在Visual Studio主窗口左边选择Resource View选项卡切换到Resource View视图窗口,可以查看生成资源的名称和类型。一般情况下,都需对已生成的程序资源进行修改或添加新的资源。Resource View(资源视图)窗口如图2-14所示。图2-14 Resource View窗口

在资源窗口中,我们可以创建和修改各种资源,不同资源的创建、修改以及应用方式有所不同,具体如下。

1. 创建新资源(插入资源)

在资源视图窗口中选择需要添加资源的项目,然后在项目文件上右击,从弹出的快捷菜单中选择Add Resource命令,打开Add Resource对话框,如图2-15所示。图2-15 Add Resource对话框

从Resource type列表中选择资源类型,然后单击New按钮即可创建新的资源。

2. 查看和修改资源

打开Resource View窗口,展开文件树,从每一个分类中查看所有的资源。可以用菜单命令复制、移动、粘贴或删除资源,也可以双击打开相应的编辑器来修改资源,并运用资源属性对话框来修改资源的语言属性或条件属性。

3. 资源ID

资源ID由映射到整数值上的字符串组成,用于在源代码或资源编辑器中引用资源或对象。通过资源属性对话框,可以改变资源的ID名或对应的整数值。具体的操作步骤如下。(1) 在Resource View窗口中选择要处理的资源。(2) 通过View菜单中的Properties Windows(属性窗口)命令打开Properties窗口。(3) 在显示的Properties窗口中修改对应的ID子项就可以对资源ID进行修改,如图2-16所示。图2-16 用于修改资源ID的属性窗口

IDE自动生成的符号名称前缀还用来代表资源或对象类型,如光标前缀的IDC_;位图前缀的IDB_等。可以利用Visual Studio提供的Resource Symbols对话框查看资源符号的定义,还可以在其中创建和删除资源符号,或者快速切换到某个资源对应的资源编辑器中。

4. 对话框编辑器

在Resource View窗口中右击Dialog(对话框)文件夹,在弹出的快捷菜单中选择Add Dialog(添加对话框)命令打开对话框编辑器。

对话框编辑器用于创建或编辑对话框资源或对话框模板,向对话框中添加控件或调整其布局,并测试对话框的功能。另外,也可添加ActiveX控件,引入Visual Basic表单作为对话框资源,或者把对话框保存为模板以供将来使用。

图2-17显示的是对话框编辑器窗口,一旦打开此窗口,则对应的ToolBox工具箱中的Dialog Editor工具栏会同时处于可用状态,如图2-18所示。图2-18 Toolbox工具箱图2-17 对话框编辑器窗口中的Dialog Editor工具栏

利用Toolbox工具箱的Dialog Editor选项卡可以向对话框添加所选择的控件。可以添加的控件有:静态文本(Static Text)、编辑框(Edit Control)、组合框(Group Box)、按钮(Button)、复选框(Check Box)、水平滚动条(Horizontal Scroll Bar)、垂直滚动条(Vertical Scroll Bar)、微调控件(Spin Control)、进展条(Progress Control)、热键(Hot key)、列表控件(List Control)、树形控件(Tree Control)、制表控件(Tab Control)和动画(Animation Control)等,还可以根据需要创建新的定制控件(Custom Control)。添加控件有以下两种方法。● 将控件从Toolbox工具箱的Dialog Editor工具栏中拖到对话框编辑

器窗口的指定位置。● 先单击Toolbox工具箱的Dialog Editor工具栏中要添加的控件,然

后移动光标到要添加控件的位置并单击鼠标。

要添加多个同一类型的控件,应同时按住Ctrl键。选择控件后,可以对其进行移动、复制、删除或调动,也可以拖动尺寸句柄缩放控件。另外,可以使用控件的属性窗口修改控件的属性。

通过Layout工具栏可以将对话框上对应的控件位置进行自动调整。该工具栏包括以下几个工具,如表2-3所示。表2-3 Layout工具栏

5. 菜单编辑器

通过选择Resource View窗口中的Menu文件夹,然后右击,从显示的快捷菜单中选择Insert Menu命令可以打开菜单编辑器。使用菜单编辑器可创建标准菜单和菜单项,为菜单或菜单项定义热键、快捷键和状态栏提示,或者创建快捷菜单。图2-19为打开某一菜单资源后的菜单编辑器。图2-19 菜单编辑器

1) 创建菜单项

创建菜单栏中菜单项的方法如下。(1) 选择菜单编辑器中新建菜单项的方框,或按Tab键(向左移)、Shift+Tab键(向右移)或左右箭头键移到新建菜单项的方框(插入时按Insert键)。(2) 使用鼠标双击需要设置新菜单的菜单位置,菜单编辑器上显示可以输入状态,输入菜单名就可以完成菜单生成。(3) 打开属性窗口,在ID子项中输入菜单项的ID号或选取已有的ID号。菜单首次创建时,IDE可以根据选项名称自动生成一个ID值。(4) 通过更改属性框中对应的属性来为菜单项指定风格。

2) 定义快捷键

利用菜单编辑器还可以定义快捷键,具体操作步骤如下。(1) 打开属性窗口,选择需要设置快捷键的菜单项。(2) 在Caption子项中将快捷键添加到菜单标题的后面。如果在菜单标题后输入转义符“/L”,则所有快捷键都会按左对齐方式显示。(3) 在快捷键编辑器中建立相应的快捷键表条目,并赋予与菜单选项相同的ID号。

3) 创建快捷菜单

在应用程序中要使用快捷菜单,首先要创建它,然后再将其与应用程序代码链接。具体方法如下。(1) 创建带空标题的菜单栏。(2) 输入临时字符为菜单标题,以便在菜单栏中创建菜单项。(3) 在菜单下创建快捷菜单的菜单选项。(4) 保存菜单资源。(5) 根据创建应用程序的不同,使用不同的方法将快捷菜单添加到程序中去,具体将在后文详细讲述。

6. 快捷键编辑器

定义了快捷键可以使用键盘上的按键来执行菜单或工具栏上的命令。使用快捷键编辑器可以添加、删除、更改和浏览项目所用到的快捷键,也可以查看和更改与快捷键表中每个条目有关的资源标识符,还可以为某个菜单选项定义快捷键。

通过在Resource View窗口中的Accelerator文件夹上选择Insert Accelerator Table命令或者双击Accelerator文件夹中的Accelerator table子项,可以打开快捷键编辑器。

图2-20所示为打开某一快捷键表资源后的快捷键编辑器。按Insert键或在表尾的方框中输入快捷键名,将弹出Accel Properties对话框,从中可以为快捷键表添加新的快捷键,可以在该对话框的Key列表框中输入键名,在ID列表框中输入快捷键标识符。图2-20 快捷键编辑器

通过在快捷键编辑器的最后一行双击,可以进行新快捷键的编辑。快捷键编辑器中第一列用于设置快捷键对应的资源ID,也就是设置快捷键为哪一个按钮或者菜单的快捷键,Key列用于设置快捷键对应的虚拟键值,Type列用于设置Key列对应使用的是虚拟键值还是ASCII码值。

Key列键值的设置必须满足以下几个条件。● 0~255间的整数,可以写成十进制、十六进制或八进制格式。● 单个键盘字符,大写的A~Z或数字0~9既可解释成ASCII码值,

也可看成虚拟键值,其他字符都看成ASCII字符。● 由单个A~Z间的字母键所产生的组合键对应ASCII码值。● 任何合法的虚拟键标识符,可以单击Key列右侧的向下箭头来选

择标准的虚拟键标识符。

当输入ASCII码值时,不能通过符号A和控制键的组合来产生相应的虚拟键值。

7. 字符串表编辑器

字符串表是一种Windows资源,包含应用程序用到的字符串表的ID号、值和标题。每个应用程序只能有一个字符串表。字符串表编辑器用于编辑应用程序的字符串表资源。使用字符串表编辑器,可以浏览字符串表、向字符串表添加新的字符串,从字符串表中删除某一字符串,将字符串从某一段移到另一段,将字符串从某一资源文件移到另一资源文件,修改字符串及其标识符等。图2-21所示为打开某一应用程序的字符串表资源后的字符串表编辑器。通过在Add Resource对话框中选择新建String Table(字符串表)或者从Resource View窗口中双击String Table文件夹中的String Table子项,都可以打开字符串编辑器。图2-21 字符串表编辑器

8. 版本信息编辑器

版本信息主要由公司名称、产品标识、产品版本号、版权和商标注册号组成。版本信息编辑器是用于编辑和维护版本信息的工具。每个应用程序只有一个版本信息资源,其名称为VS_VERSION_INFO。在应用程序中调用函数GetFileversionInfo和VerQueryValue可以访问版本信息。图2-22是打开某一应用程序的版本信息资源后显示的版本信息编辑器。

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载