基于VC图形处理软件开发学士学位论文外文原文及翻译_第1页
基于VC图形处理软件开发学士学位论文外文原文及翻译_第2页
基于VC图形处理软件开发学士学位论文外文原文及翻译_第3页
基于VC图形处理软件开发学士学位论文外文原文及翻译_第4页
基于VC图形处理软件开发学士学位论文外文原文及翻译_第5页
已阅读5页,还剩43页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、摘要 I摘要 #摘要在现代社会中,电脑被视为视觉艺术中越来越常用的工具。 原本依托于纸张 的信件和绘画,依托于胶片的照相摄影及医学检查,它们均在慢慢向电子化与网 络化发展。各种显示设备已经能够满足人们对于图像几乎所有的需求。因此,人们也需要能够在显示屏上像用纸和笔一样进行绘画。这篇论文针对这一需求,提出了使用VC+利用微软公司的MFC类库,在Windows平台上制作一个简易的、 轻量的、低学习成本的画板程序的方法。关键词:MFC,C+,图形图像编程,画板程序ABSTRACT #ABSTRACT IIABSTRACTIn moder n society, computers are see n

2、as more and more com mon ly used in visual arts. Letters and paintings were originally based on paper, photography and medical check were orig in ally based on film, but now they are beco ming electr onic and n etworked.A variety of display devices have bee n able to meet peoples dema nd for almost

3、all images. Therefore, people also n eed to be able to paint on the scree n like using paper and pen. In resp onse to this dema nd, this paper prese nts a method of making a drawing board program with using Microsofts MFC class library in Visual C+, which is lightweight and low lear ning costs.Keywo

4、rds: MFC, VC+, Graphic image program ming, Drawi ng board program目录iii目录iii第-一章绪论11.1数字图像的发展11.2绘图软件的发展现状11.3编程语言简介 21.4本文主要研究内容3第二章编程基础42.1编程原理42.1.1 C语言编程原理42.1.2面向对象编程52.1.3类简介52.1.4 MFC 简介62.2程序创建原理72.2.1创建源代码文件82.2.2编译和链接92.3本章小结10 TOC o 1-5 h z HYPERLINK l bookmark34 o Current Document 第三章MFC程

5、序的实现 11 HYPERLINK l bookmark36 o Current Document 3.1创建MFC应用程序框架 11 HYPERLINK l bookmark38 o Current Document 3.2控件11 HYPERLINK l bookmark40 o Current Document 3.2.1静态控件13 HYPERLINK l bookmark42 o Current Document 3.2.2编辑框控件14按钮16 HYPERLINK l bookmark58 o Current Document 3.2.4组合框20 HYPERLINK l book

6、mark76 o Current Document 3.3图形图像编程24 HYPERLINK l bookmark78 o Current Document 3.3.1 GDI坐标系与映射模式 25 HYPERLINK l bookmark80 o Current Document 3.3.2颜色和颜色设置 26 HYPERLINK l bookmark82 o Current Document GDI 对象26 HYPERLINK l bookmark84 o Current Document 3.3.4画笔工具27 HYPERLINK l bookmark86 o Current Doc

7、ument 3.3.5图形绘制工具28 HYPERLINK l bookmark98 o Current Document 3.3.6画刷工具29 HYPERLINK l bookmark110 o Current Document 3.4本章小结30目录 #目录 # HYPERLINK l bookmark114 o Current Document 第四章总结31致谢32 HYPERLINK l bookmark116 o Current Document 参考文献33附录34 HYPERLINK l bookmark120 o Current Document 外文文献原文39 HYPE

8、RLINK l bookmark124 o Current Document 外文文献译文44第一章绪论 电子科技大学学士学位论文 第一章绪论1.1数字图像的发展有证据表明,在书面沟通之前,绘画是人类表达思想的最古老形式之一。大约3万年前,在书面语言发明之前,绘画就已经作为智人专门的交流方式 出现在他们洞穴的壁画及岩画中 。那些图形被称为象形图,描绘其所指对象的抽 象概念。史前时期的草图和绘画不断的被风格化和简化,推动了书面语言的产生发展。绘画在人类历史上一直是公众表达的流行和基本手段。它是传达视觉想法 的最简单和最有效的手段之一。绘画是使用各种各样的工具和技术制作图像的手段。传统的绘画过程使

9、用铅 笔、钢笔、刷子、蜡笔、木炭和(或)粉彩。在数字化的绘图软件中,很多基础 工具都对实物工具进行的模仿与改进,如直线工具、铅笔工具、矩形和椭圆工具、 橡皮擦工具及字符输入工具等。视觉艺术家已经不再局限于传统的艺术媒体。20世纪60年代以来,电脑被视为视觉艺术中越来越常用的工具。其用途包括捕获或创建图像,编辑以及最终的 渲染和打印。对于电脑的使用模糊了插画师、摄影师、照片编辑、3D建模工作者和工艺品艺术家之间的区别。复杂的渲染和编辑软件促成了多技能的图像开发人 员的出现。艺术家等创作者更愿意使用个人电脑进行创作。因为使用绘图软件比传统方 法需要较少的手眼协调,较少的想象能力,同时利用计算机的自

10、动渲染功能可以 更高效的(有时更准确的)来创建图像。然而,随着计算机计算能力的提升,绘 图软件的风格、特效和编辑方法复杂多样,可能需要比传统绘画更多的学习成本, 并且这一成本随着对软件掌握的程度直线上升。此时软件是激发还是压抑创造力 就取决于其界面的直观性5。1.2绘图软件的发展现状图形从广义上说,是能在人的视觉系统中形成视觉印象的客观对象。计算机 图形学由Ivan Sutherland于1962年提出,并于近些年来飞速发展。计算机图形学 是计算机科学的重要分支。目前图形的应用软件很多,例如Photoshop, AutoCAD等,但就开发图形系统本身来说,仍需构筑其底层平台,以便研究新的算法,

11、扩 充新的功能,加快图形处理速度,产生更加逼真的造型效果。Visual C+作为一种 通用的软件开发工具,目前仍然是开发底层软件不可或缺的平台。本次研究正是 基于这些因素,利用MFC的基础类库开发一个基本绘图环境,力求为图形系统的 进一步开发研究提供一个良好的平台5,6 o图形是Windows应用程序的重要组成部分,优美的图形界面是所有成功软件 的共同特点。VC+是当前最为流行的基于 Windows的开发工具之一,其功能的强 大,精通VC+是不少程序开发人员的努力方向。在 VC+中,每一项功能的实现 都有着严密的逻辑与算法,只有清楚功能背后的原理与方法,才能做到运用自如。 VC+的编程方式有两

12、种,一种是直接使用 API函数,另一种是使用 MFC类库。 第一种方式是传统的 Windows编程方式,保留传统编程中面向过程的特征。第二 种方式下MFC把API函数封装到各种类与对象内,是面向对象与 Windows编程 的有机结合,真正体现出了 VC+编程的风格。本文具体分析MFC方式下实现绘图 功能的几个关键问题,并给出具体实例。1.3编程语言简介在过去的几十年,计算机技术以令人惊讶的速度发展,编程工作也随之发生 翻天覆地的变化,程序员不再需要将穿孔卡片提交给充斥整个房间的大型计算机 系统,而这种系统可能只有100KB的内存。计算机语言也得到了发展,尽管变化 可能没有更大,但也是非常重要的

13、。体积更大、功能更强的计算机引出了更大、 更复杂的程序,而这些程序在程序管理和维护方面又带来了新的问题。20世纪70年代,C和Pascal语言标志着进入结构化编程时代,同时 C语言还能生成简洁、 快速运行的程序,并提供了处理硬件问题的能力。这些因素使C语言成为20世纪80年代占统治地位的编程语言。同时,20世纪80年代,人们也见证了一种新编 程模式的成长:面向对象编程(Object Orie nted Programmi ng, OOP)。20世纪70年代早期,贝尔实验室的 Dennis Ritchie致力于开发UNIX操作系 统。完成这项工作需要一种语言,它必须能够生成简洁、快速的程序,并能

14、有效 地控制硬件。传统上,程序员使用汇编语言来满足这些需求,汇编语言依赖于计 算机的内部机器语言。然而,汇编语言是低级语言,即直接操作硬件,如直接访 问CPU寄存器和内存单元,因此汇编语言针对于特定的计算机处理器。如果想将 汇编程序移植到另一种计算机上,必须使用不同的汇编语言重新编写程序。然而 UNIX是为在不同的计算机或平台上工作而设计的,这意味着需要一种高级语言。 高级语言致力于解决问题,同时不会专用于特定的硬件,编译器则将高级语言翻 译成特定计算机的内部语言。这样,就可以通过对于每个平台使用不同的编译器, 而实现不同平台上使用同一个高级语言程序了。Ritchie希望有一种语言能将低级 语

15、言的效率、硬件访问能力和高级语言的通用性、可移植性融合在一起,于是他 在旧语言的基础上开发了 C语言。“ C+主要是为了我的朋友和我不必再使用汇编语言、C语言或其他现代高级 语言来编程而设计的。它的主要功能是可以更方便地编写出好程序,让每个程序 员更加快乐”。C+发明者Bjarne Stroustrup如此认为。Stroustrup比较关心的是让 C+更有用,而不是实施特定的编程原理或风格。在确定C+语言特性方面,真正 的编程需要比纯粹的原理更重要。C+是C语言的超集,这意味着任何有效的 C 程序都是有效的C+程序。它们之间有些细微的差异,但C+程序仍可以使用已有的C软件库。库是编程模块的集合

16、,可以从程序中调用它们。库对很多常见的 编程问题提供了可靠的解决方法,因此能节省程序员大量的时间和工作量。这也 有助于C+的广泛传播。名称C+来自C语言中的递增运算符+,该运算符将变 量加1。名称C+表明,它是C的扩充版本。1.4本文主要研究内容本文主要研究在Visual Studio平台下使用VC+的MFC基础类库实现一个画 板程序的基本功能,其功能包含有:铅笔工具,可自定义绘制的线形与粗细;直线工具,可自定义绘制的线形与粗细;矩形、圆角矩形与椭圆工具,可自定义所绘图形的填充物。以XY轴坐标方式定位光标位置,方便精细操作;支持以jpg、bmp等格式保存文件。其中,绘图工具均支持选择黑色、蓝色

17、、绿色、红色、白色或自定义颜色。第二章编程基础 电子科技大学学士学位论文 第二章编程基础2.1编程原理C+融合了 3种不同的编程方式:以C语言代表的过程性语言;C+在C语言 基础上添加的类代表的面向对象语言;C+模板支持的泛型编程。编程技术人员使 用C+的原因之一就是为了利用其面向对象的特性。而要利用这种特性,就需要 对标准C语言知识有较深入的了解,因为 C+与C语言存在一些共有特征:C语 言提供了基本类型、运算符、控制结构和语法规则。但这并不仅仅是学习更多的 关键字和结构。初学者在掌握了 C之后学习C+,其学习量与从头学习C语言一 样大。另外,如果不了解 C语言,则学习C+时需要掌握C语言知

18、识、面向对象 编程知识以及泛型编程知识。2.1.1 C语言编程原理由于C+在C语言的基础上移植了新的编程理念,因此我们首先来看一看C所遵循的旧的理念。一般来说,计算机语言要处理两个概念一一数据和算法。数据是程序使用和处理的信息,而算法是程序使用的方法。C语言与当前主流的语言 一样,在最初面世时也是过程性语言,这意味着它强调的是编程的算法方面。从 概念上说,过程化编程首先要确定计算机应采取的操作,然后使用编程语言来实 现这些操作。随着程序规模的扩大,早期的程序语言都会遇到组织方面的问题。例如,程 序经常使用分支语句,根据某种测试的结果,执行一组或另一组指令。很多旧式 程序的执行路径很混乱,几乎不

19、可能通过阅读程序来理解它,修改这种程序简直 是一场灾难。为了解决这种问题,计算机科学家开发了一种更有序的编程方法 ?结构化编程。C语言具有使用这种方法的特性。例如,结构化编程可以将分 支限制为一小组行为良好的结构。C语言的词汇表中就包含了这些结构 (for循环、 while循环、do while循环和if else语句)。另一个新原则是自上向下的设计。在 C语言中,其理念是将大型程序分解成 小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任 务。迭代这一过程,直到将程序划分为小型的、易于编写的模块。C语言的设计有助于使用这种方法,它鼓励程序员开发程序单元(函数)来表示各个任

20、务模块。 如上所述,结构化编程技术反映了过程性编程的思想,根据执行的操作来构思一 个程序。2.1.2面向对象编程虽然结构化编程的理念提高了程序的清晰度、可靠性,并使之便于维护,但 它在编写大型程序时,仍面临着挑战。为应付这种挑战,面向对象编程提供了一 种新方法。与强调算法的过程性编程不同的是,面向对象编程强调的是数据。面 向对象编程不像过程性编程那样,试图使问题满足语言的过程性方法,而是试图 让语言来满足问题的要求。其理念是设计与问题的本质特性相对应的数据格式。在C+中,类是一种规范,这种新型数据格式,其对象是根据这种规范构造 的特定数据结构。例如,类可以描述公司管理人员的基本特征(姓名、头衔

21、、工 资、特长等),而对象则代表特定的管理人员。通常,类规定了可使用哪些数据来 表示对象以及可以对这些数据执行哪些操作。如本例,开发一个能够绘制矩形的 计算机绘图程序,则可以定义一个描述矩形的类。定义的数据部分包括顶点的位 置、长和宽、四条边的样式、矩形内部的填充颜色和图案等;定义的操作部分可 以包括移动、改变大小、改变颜色和图案等操作。这样,当使用该程序来绘制矩 形时,它将根据类定义创建一个对象。该对象保存了描述矩形的所有数据值,因 此可以使用类方法来修改该矩形。如果绘制两个矩形,程序将创建两个对象,每 个矩形对应一个。面向对象编程程序设计方法首先设计类,它们准确地表示了程序要处理的东 西。

22、例如,绘图程序可能定义表示矩形、直线、圆、画笔的类。类定义描述了对 每个类可执行的操作,然后便可以设计一个使用这些类的对象的程序。从低级组 织(如类)至V高级组织(如程序)的处理过程叫做自下向上的编程。面向对象编 程不仅仅是将数据和方法合并为类定义,面向对象编程还有助于创建可重用的代 码,这将减少大量的工作。信息隐藏可以保护数据,使其免遭不适当的访问;多 态能够为运算符和函数创建多个定义,同时通过编程上下文能确定使用哪个定义; 继承能够使用旧类派生出新类。面向对象编程引入了很多新的理念,使用的编程方法不同于过程性编程。它 的重点不是放在任务上,而是放在表示概念上。设计有用、可靠的类是一项艰巨

23、的任务,幸运的是,面向对象编程语言使程序员在编程中能够轻松地使用已有的 类。厂商提供了大量有用的类库,包括设计用于简化 Windows环境下编程的类库, 如本次研究中使用了 Microsoft设计的MFC类库。2.1.3类简介类是C+中一种重要的格式,其理论支撑是面向对象编程。类规范由两个部 分组成。类声明:以数据成员的方式描述数据部分,以成员函数的方式描述公有 接口;类方法定义:描述如何实现类成员函数。简单地说,类声明提供了类的蓝 图,而方法定义则提供了细节。面向对象编程是一种编程风格,这种风格主要存在于C+的编程中。类定义了一种抽象类型,它将存储格式和函数原型置于头文件中,对函数的使用者隐

24、藏 了实际的数据表示。C+包括了许多专门用来实现面向对象编程方法的特性。首先,将数据表示和函数原型放在一个类声明而不是放在一个文件中,通过将所有内容 放在一个类声明中,来使描述成为一个整体。其次,让数据表示成为私有,使得 数据只能被授权的函数访问。在 C语言中、如果main ()直接访问了结构成员, 就违反了面向对象编程的精神、但没有违反c语言的规则。如果试图直接访问私有数据,编译器将捕获这种错误。数据隐藏不仅可以防止直接访问数据,还让程序开发者无需了解数据是如何 被表示的。从他们的角度看,数据隐藏与否没有什么区别,所需要知道的只是各 种成员函数的功能;也就是说,需要知道成员函数接受什么样的参

25、数以及返回什 么类型的值。另外,如果以后找到了更好的实现数据表示或成员函数的方法,可 以针对这些进行修改,而无须修改程序接口,这使程序维护起来更容易。无论类成员是数据成员还是成员函数,都可以在类的公有部分或私有部分中 声明它。但由于隐藏数据是OOP主要的目标之一,因此数据项通常放在私有部分, 组成类接口的成员函数放在公有部分;否则就无法从程序中调用这些函数。通常, 程序员使用私有成员函数来处理不属于公有接口的实现细节。除了 public和private两个关键字可以控制对类成员的访问外,还存在另一个 访问类别,这种类别用关键字 protected表示。关键字protected与private相

26、似,在 类外只能用公有类成员来访问 protected部分中的类成员。private和protected之间 的区别只有在基类派生的类中才会表现出来。派生类的成员可以直接访问基类的 保护成员,但不能直接访问基类的私有成员。因此,对于外部世界来说,保护成 员的行为和私有成员相似;但对于派生类来说,保护成员的行为与公有成员相似。2.1.4 MFC 简介Visual Studio作为Windows平台最早发布并发展沿用至今的开发工具集,其 功能的完全性、多样性是大部分编程软件无法比拟的。它包括了整个软件生命周 期中所需要的大部分工具,如 UML工具、代码管控工具、集成开发环境(IDE) 等等。使用其

27、所写的目标代码适用于微软支持的所有平台。MFC即微软基础类(Microsoft Foundation Classed,由微软提供,用于在C+ 语言下编写应用程序。VC+是Win DOS下开发人员使用的专业 C+ SDK,MFC 则是挂载在VC+下的辅助软件开发包。MFC是Win API与C+的结合,API即微软提供的 Win DOS下应用程序的编 程语言接口,是软件编程的规范,但不是程序开发语言本身。它可以允许用户使 用各种各样的第三方的编程语言来进行对 Win DOS下应用程序进行开发,使这些 被开发出来的应用程序能在 Win DOS下运行,比如 VB,VC+,Java,它们的编 程语言函数

28、本质上全部源于API,因此用它们开发出来的应用程序都能工作在WinOS的消息机制和绘图里,遵守 Win DOS的内部实现。MFC作为微软对API 函数的专用C+封装,这种结合让用户使用微软的专业 C+ SDK来进行Win下应 用程序的开发变得容易,程序开发人员在Windows下用MFC编制软件时的大量内 节被隐藏,例如应用程序实现消息处理,设备环境绘图等。这种结合是以方便为 目的的,势必要付出一定代价,因此就造成了 MFC对类封装中的一定程度的冗余 和迂回,这种代价是可以接受的。最后,MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分被用 来进行界面开发,关联一个窗口的动作。但它提供的

29、类中有很多不与一个窗口关 联。对于这部分类,它们不是一个界面类,不实现对一个窗口对象的控制(如创 建,销毁),而是一些在 Win DOS (用MFC编写的程序绝大部分都在 Win DOS中 运行)中实现内部处理的类,如数据库的管理类等 9-11。MFC是微软封装了的API。Windows是功能强大的应用程序接口编程的操作 系统,方便了许多程序员。传统的 win32开发,即直接使用 Windows的接口函数 API对于程序员来说非常的困难,因为 API函数很多,内容杂乱,从零构架一个 窗口动辄就是上百行的代码。 MFC是面向对象程序设计与 application framework 的完美结合,

30、它将传统的API进行了分类封装,并且创建了程序的一般框架。2.2程序创建原理编写一个C+程序,其最终目的就是让它能够运行,具体的步骤取决于计算 机环境和使用的C+编译器,但大体如下(如图2-1所示):使用文本编辑器编写程序,并将其保存到文件中,这个文件就是程序的源 代码。编译源代码。这意味着运行一个程序,将源代码翻译为主机使用的内部语 言一一机器语言。包含了翻译后的程序的文件就是程序的目标代码。将目标代码与其他代码链接起来。例如,C+程序通常使用库。C+库包含一系列计算机例程(被称为函数)的目标代码,这些函数可以执行诸如在屏幕上 显示信息或计算平方根等任务。链接指的是将目标代码同使用的函数的目

31、标代码 以及一些标准的启动代码组合起来,生成程序的运行阶段版本。包含该最终产品 的文件被称为可执行代码。要创建C+程序,可创建一个或多个源代码文件,其中包含了以C+语言表示的程序。这些文件是文本文件,它们经过编译和链接后将得到机器语言文件, 后者构成了可执行的程序。上述任务通常是在IDE中完成的,IDE提供了用于创建源代码文件的文本编辑器、用于生成可执行文件的编译器和链接器以及其他资 源,如项目管理和调试功能。这些任务也可以在命令行环境中通过调用合适的工 具来完成12。2.2.1创建源代码文件本节讨论创建源代码文件的技巧。有些C+实现提供了集成开发环境(Integrated Developme

32、nt Environmen,缩写为IDE),能够让程序员在主程序中管 理程序开发的所有步骤,包括编辑。有些实现只能处理编译和链接阶段,要求在 系统命令行输入命令。在这种情况下,可以使用任何文本编辑器来创建和修改源 代码。如果将文件保存为标准 ASCII文本文件,甚至可以使用字处理器。另外, 还可能有IDE选项,让用户能够使用这些命令行编译器。给源文件命名时,必须 使用正确的后缀,将文件标识为 C+文件。这将告知编译器该文件是 C+源代码。后缀的字符被称作扩展名。对于本例,Windows系统的Visual Studio而言,C+文件的扩展名通常为cpp, cxx与cc。2.2.2编译和链接最初实

33、现C+时,是使用C+到C的编译器程序,而不是开发直接的 C+到 目标代码的编译器。这种方法简化了向 C的领域引入C+的过程。随着C+的日 渐普及,越来越多的实现转向创建 C+编译器,直接将C+源代码生成目标代码。 这种直接方法加速了编译过程,并强调C+是一种独立的语言。编译的机理取决于如何实现。对于 Windows系统,实现方法一般有Windows命令行编译器及Windows编译器程序。对于其他系统实现的方法,在此不作赘述。Win dows命令行编译器要在Windows PC上编译C+程序,最便宜的方法是下载一个在 Windows命 令提示符模式下运行的命令行编译器。Cygwin和MinGW都

34、包含编译器GNUC+, 它们使用的编译器名为g+0要使用g+编译器,首先需要打开一个命令提示符窗 口。启动程序Cygwin和MinGW时,它们将自动打开一个命令提示符窗口。要编 译名为great.cpp的源代码文件,可以在提示符下输入命令:g+ great.cpp如果程序编译成功,则可得到名为 a.exe的可执行文件。Win dows编译器Windows编译器产品很多且修订频繁,无法对它们分别进行介绍。虽然设计 和目标不同,但大多数基于 Windows的C+编译器都有一些相同的功能。通常,必须为程序创建一个项目,并将组成程序的一个或多个文件添加到该 项目中。所有厂商提供的集成开发环境(IDE

35、)都包含用于创建项目的菜单选项。 必须确定的非常重要的一点是,需要创建的是什么类型的程序。通常,编译器提 供了很多选择,如 Windows应用程序、MFC Windows应用程序、动态链接库、 ActiveX控件、DOS或字符模式的可执行文件、静态库或控制台应用程序等。创建 好项目后,需要对程序进行编译和链接。IDE通常提供了多个菜单项,如 Compile (编译)、Build (建立)、Make (生 成)、Build All (全部建立)、Link (链接)、Execute (执行)、Run (运行)和 Debug (调试),不过同一个IDE中不一定包含所有这些选项。Compile通常意味

36、着对当 前打开的文件中的代码进行编译。Build和Make通常意味着编译项目中所有源代 码文件的代码。这通常是一个递增过程,也就是说,如果项目包含3个文件,而只有其中一个文件被修改,则只重新编译该文件。Build All通常意味着重新编译所有的源代码文件。Link意味着将编译后的源代码与所需的库代码组合起来。Run或Execute意味着运行程序。通常,如果还没有执行前面的步骤,Run将在运行程序之前完成这些步骤。Debug意味着以步进方式执行程序。编译器可能让您选择要 生成调试版还是发布版。调试版包含额外的代码,这会增大程序、降低执行速度, 但可提供详细的调试信息。如果程序违反了语言规则,编译

37、器将生成错误消息, 指出存在问题的行。遗憾的是,不熟悉语言将会难以理解这些消息。有时,真正的问题可能在标 识行之前;有时,一个错误可能引发一连串的错误消息。改正错误时,应首先改 正第一个错误。如果在标识为有错误的那一行上找不到错误,则需要查看前一行。程序能够通过某个编译器的编译并不意味着它是合法的C+程序;同样,程序不能通过某个编译器的编译也并不意味着它是非法的C+程序。编译器通常提供了可用于控制严格程度的选项。有时,编译器在不完全地构建程序后将出现混乱,显示无法改正的、无意义 的错误消息。在这种情况下,可以选择Build All,重新编译整个程序,以清除这些错误消息。更加遗憾的是,这种情况和

38、更常见的情况一一即错误消息只是看上去无意义而实际上有意义,是很难做出区分的。通常,IDE允许在辅助窗口中运行 程序。若需要查看输出,必须在程序的最后加上一些代码:ci n.get();ci n.get();return 0;其中cin.get()语句的作用是读取下一次键击,因此上述语句让程序等待,直到 按下了 Enter键。在按下Enter键之前,键击将不被发送给程序,因此按其他键都 是无效的。如果程序在其常规输入后留下一个没有被处理的键击,则第二条语句 是必需的。例如,如果要输入一个数字,则需要输入该数字,然后按En ter键。程序将读取该数字,但Enter键不被处理,这样它将被第一个 ci

39、n.get()读取13。2.3本章小结本章主要介绍使用Visual Studio进行VC+编程的原理与概念,介绍了Windows平台上主要的编程环境 Visual Studio的基本使用方法,介绍了编写一个 后缀为exe的可执行文件的基本原理与步骤。第三章MFC程序的实现 电子科技大学学士学位论文 第三章MFC程序的实现3.1创建MFC应用程序框架创建一个应用程序,首先要创建一个工程项目,利用项目管理程序中的所有 元素,进而编译、生成应用程序。MFC App Wizard是一个创建基于微软基础类库MFC的Windows应用程序的向导,是Visual Studio常用的向导工具。当利用MFC A

40、pp Wizard创建一个项目时,可以自动生成 MFC的应用程序框架。MFC将每个 应用程序共同需要使用的代码封装起来,完成默认的程序初始化功能,建立应用 程序界面和基本的 Windows消息,避免重复工作14。Visual Studio中MFC框架的创建方法:选择文件一一新建一一项目,在Visual C+模板中选择MFC应用程序,单 击确定,打开MFC应用程序向导。同时根据画板程序的特性,对以下的选项进行 选择。在应用程序类型中选择“单个文档”,即一次只允许在程序中打开一个文件。在MFC的使用中,如果选择“在共享 DLL中使用MFC”,则表示代码在 生成与调试时不会将头文件中的#inelud

41、e文件包含于得到的exe文件内,此时运行 该应用程序会调用计算机系统中的数据库文件。若系统缺失对应文件将导致程序无法启动。对于较轻量的程序,这样做可以大幅减少软件体积。如果选择“在静 态库中使用MFC”则与之相反,优点是能保证软件的正常运行,但会增大程序的 体积。在数据库支持中选择“无”。其他选项使用默认设置即可。之后根据需要,可使用类向导等工具添加需要 的类及类成员函数15。3.2控件在Windows应用中,对话框和控件是密不可分的。控件搭载与对话框上,对 话框通过这些控件与用户进行交互。Windows提供的控件有两类,分别是标准控件和公共控件,说明如下。标准控件包括静态库、编辑框、按钮、列

42、表框、组合框和滚动条等。利用标准控件可 以满足大部分用户界面程序设计的基本要求,如编辑框用于输入数据,复选框用于选择不同选项,列表框用于选择要输入的信息。公共控件如滑块、进度条、标签控件和树状图控件等,以实现应用程序用户界面风格 的多样性。因为画板软件不需要公共控件扩展功能,可以仅使用标准控件完成,故下文 只介绍标准控件的实现。Windows系统标准控件的创建分为静态创建和动态创建两种,说明如下15。静态创建它是指在对话框模板中创建控件并设置控件属性。在调用对话框时,窗口会 自动按照预先的设置为对话框创建控件,而且程序员可以使用类向导ClassWizard为该控件在对话框类中创建一个控件类对象

43、。动态创建它是指在程序运行中根据需要,定义一个控件类的对象,再通过窗口函数 CreateWindow()或者 CreateWindowEx()创建控件,调用函数 ShowWindow()显示控 件,正如操作一个子窗口一样。每个控件都有一个属性表,对于静态创建的控件来说,可以在对话框模板中 打开控件的属性对话框,并直接设置控件的初始属性。在设计程序的过程中,可 以通过控件类对象调用方法设置控件的属性。在Windows标准控件中,除了静态控件通常不发送消息外,其他控件对于用 户的操作都能发送消息,且不同种类的控件发送的消息不同。可以使用类向导 ClassWizard为控件映射各种消息处理函数。在程

44、序的运行过程中,可以通过函数 UpdateDataQ主动控制数据在控件显示和成员变量之间的数据交换,同时MFC保留了 Windows API函数用于直接对控件ID操作控件,获取或者设置控件的显示值, 例如函数SetDlgltemText()和SetDlgltemText()用于设置或获取编辑框中的文本。Windows应用程序对控件的操作实质上是对窗口的操作,对话框窗口中的控 件被视为对话框窗口的子窗口,具有通用窗口的属性,所以控件的操作还可以通 过对一组窗口操作函数来完成。常用的控件子窗口的操作函数如下。CreateWindow()或CreateWindowEx(),在程序运行过程中,可以通过

45、创建窗口 的函数来动态创建控件。ShowWindow(),显示或者隐藏控件。En ableWi ndow(),激活控件或者禁止控件接受用户的输入。MoveWindow(),移动控件或者改变控件的大小。DestroyWindow(),关闭一个控件。321静态控件静态控件包括静态文本和图片控件。其中静态文本控件用来显示正文,而图 片控件可以显示位图、图标、方框和图元文件。在图片控件中显示图片的好处是不必担心图片的重绘问题。静态控件不能接受用户的输入,主要起到说明和装饰的作用。在MFC应用中,类CStatic封装了静态空间。类CStatic的成员函数Create() 负责创建静态控件。该函数的格式声

46、明如下。BOOL Create (LPCTSTR IpszText, DWORD dwStyle, const RECT&rect, CWnd* pPare ntWnd, UNIT nlD=Oxffff );lpszText指定了控件显示的文本。dwStyle制订了静态控件的类型,在表 3-1 中列出了静态控件的各种类型。rect是一个对RECT或CRect结构的引用,用来说 明控件的位置和尺寸。pPare ntWnd指向父窗口,该参数不能为 NULL。nID说明 了空间ID,如果创建成功该函数返回 TRUE,否则返回FALSE。表3-1静态控件的类型控件类型用 途SS BLACKFRAME指

47、定一个与窗口边界同色的框(默认黑色)SS BLACKRECT指定一个与窗口边界同色的实心矩形(默认黑色)SS CENTER使显示的文本居中对齐,文本可以回绕SS GRAYFRAME指疋一个与屏幕冃景冋色的边框SS GRAYRECT指定一个与屏幕背景冋色的实矩形SS_ICON使空间显示一个在资源中定义的图标,图标的名字由Create()函数lpszText的参数指定SS LEFT左对齐文本,文本可以回绕SS LEFTNOWORDWRAP左对齐文本,文本不能回绕SS NOPREFIX使静态文本串中的&不是热键提示符SS NOTIFY使控件能向父窗口发送鼠标事件消息SS RIGHT右对齐文本,文本可

48、以回绕SS SINPLE使静态文本在运行时不能被改变且文本单行显示SS USERITEM指定一个用户定义项SS WHITEFRAME指定一个与窗口背景同色的框(默认白色)SS WHITERECT指定一个与窗口背景同色的实心矩形(默认白色)除了表3-1所示的窗口类型外,一般还要为控件指定 WS_CHILD和WS_VISIBLE 窗口类型。类CStatic主要的成员函数如表 3-2所示。可以利用类 CWnd的成员函数GetWindowText, SetWindowText 和 GetWindowTextLength 等来查询和设置静态控 件中显示的文本。表3-2 CStatic类的主要成员函数函数

49、声明用途HBITMAP SetBitmap (HBITMAP hBitmap);指定要显示的位图HBITMAP GetBitmap () con st;获取由SetBitmap指定的位图HICON SetIco n (HICON hIco n);指定要显示的图标HICON GetIco n () con st;获取由SetIcon指定的图标HCURSOR SetCursor (HCURSOR hCursor);指定要显示的光标图片HCURSOR GetCursor ();获取由SetCursor指定的光标图片HENHMETAFILE SetE nhMetaFile(HENHMETAFILE h

50、MetaFile);指定要显示的增强图兀文件HENHMETAFILE GetE nhMetaFile () con st;获取由SetEnhMetaFile指定的图兀文件3.2.2编辑框控件编辑框控件实际上是一个简易的文本编辑器,用户可以在编辑框中输入并编 辑文本。编辑框既可以是单行的,也可以是多行的。多行编辑框是从零行开始进 行行编号的。在一个多行编辑框中,除了最后一行外,每一行的结尾处都有一对 回车换行符(rn),这对回车换行符是正文换行的标志,屏幕上是不可见的。编辑 框控件会向父窗口发出如表3-3所示的控件通知消息。表3-3编辑框控件通知消息消 息含 义EN_CHAGE编辑框的内容被用户

51、改变了。与的正文被刷新后发出EN UPDA TE不同,该消息在编辑框显示EN ERRSPACE编辑框控件无法申请足够的动态内存来满足需要EN HSCROLL用户在水平滚动条上单击EN KILLFOCUS编辑框失去输入焦点EN SETFOCUS编辑框获得输入焦点EN_MAXTEXT输入的字符超过了规定的最大字符数。在没有ES_AUTOHSCROLL 或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出 该消息EN UPDATE在编辑框准备显示改变了的正文时发送该消息EN VSCROLL用户在垂直滚动条上单击MFC中的类CEdit封装了编辑框控件。类 CEdit的成员函数C

52、reate负责创建 按钮控件。该函数的格式声明如下。BOOL Create ( DWORD dwStyle, const RECT & rect, CWnd* pPare ntWnd, UNIT nID);其中dwStyle指定了编辑框控件的类型,具体的信息如表 3-4所示。dwStyle 可以是某些类型的组合。rect指定了编辑框的位置和尺寸。pParentWnd指定了父 窗口,此项不能为NULL。nID指定编辑框的ID,如果创建成功,该项返回TRUE, 否则返回FALSE。表3-4编辑框控件的类型控件类型含义ES_AUTOHSCROLL当用户在行尾键入一个字符时,文本将自动向右滚动10个字

53、符;当用户按Enter键时,文本总是滚向左边ES_SUTOVSCROLL当用户在最后个可见行按Enter时,文本向上滚动一页ES CENTER在多行编辑框中使文本居中ES LEFT左对齐文本ES LOWERCASE把用户输入的字母全部转换成小写字母ES UPPERCASE把用户输入的字母全部转换成大写字母ES MUTILINE指定一个多行编辑器。若多行编辑器不指定ES_AUTOHSCROLL类型,则会自动换行;若 不指定ES_AUTOVSCROLL 类型,则会在窗 口中文本装满时发出警告声响ES_NOHIDESEL默认时,当编辑框失去输入焦点后会隐藏所选的文本,当获得输入焦点时又显示出来。设置

54、该类型会禁止这种行为ES_OEMCONVERT使编辑框中的文本可以在ANSI字符集和OEM字符集之间相互转换ES PASSWORD使所有键入的字符都用“ *”表示ES RIGHT右对齐正文ES READONL Y将编辑框设置为只读ES_WANTRETURN使多行编辑器接受 Enter键输入并换行,如果 不指定该风格,按 Enter键会选择默认的命令 按钮,这往往会关闭对话框除了上表中的风格外,一般还要为控件指定WS_CHILD、WS_VISIBLE、WS_TABSTOP和 WS_BORDER窗口风格。创建一个普通单行编辑框应制定风格 入下:WS_CHILD|WS_VISIBLE|WS_TABS

55、TOP|WS_BORDER|ES_LEFT|ES_AUTOHSCROLL这将创建一个带边框、左对齐文本、可水平滚动的单行编辑器。323按钮在VC+应用中,按钮用以激活事件,以完成某些特定的功能。按钮控件的逻辑如图3-1所示。图3-1按钮逻辑按钮是指可以响应鼠标单击的小矩形子窗口。按钮控件包括命令按钮、检查框、单选按钮、组框和自绘式按钮。命令按钮的作用是对用户的单击做出反应并触发相应的事件,在按钮中既可 以显示正文,也可以显示位图。检查框控件可以作为一种选择标记,可以有选中、 未选中和不确定三种状态。单选按钮控件一般都是成组出现的,具有互斥的性质, 即同组单选按钮中只能有一个是被选中的。组框用来

56、将相关的一些控件聚成一组。选择框和单选按钮是一种特殊的按钮,它们有选中和未选中的状态。当一个 选择框处于选择状态时,在小方框内会出现一个“V” ,当单选按钮处于选择状态 时,会在圆圈中显示一个黑色实心圆点。此外。检查框还有一种不确定状态,这 时检查框表现为灰色不能接受用户的输入,用以表明控件是无效或无意义的。按钮控件能够向父窗口发出如下通知消息。表3-5按钮控件的通知消息消 息含义BN CLICKED用户在按钮上单击BN DOUBLECLLICKED用户在按钮上双击在MFC应用中,类CButton封装了按钮控件。类CBotton的成员函数Create()负责创建按钮控件,该函数的声明格式如下:

57、BOOL Create (LPCTSTR IpszC apti on,DWORD dwStyle,const RECT & rect,CWnd* pPare ntWnd,UNIT nID);其中lpszCaption指定按钮显示的文本。dwStyle指定按钮的风格,由表3-6列 出,风格可以是多种的组合。rect说明了按钮的位置和尺寸。pParentWnd指向父 窗口,该参数不能为NULL。nID为按钮的ID,如果创建成功则返回TRUE,否则 返回FALSE。表3-6按钮的风格控件风格含义BS CHECKBOX指定在矩形按钮右侧带有标题的选择框BS AUTOCHECKBOX同BS CHECKB

58、OX,不过单击时按钮会自动反转BS RADIOBUTTON指定一个单选按钮,在圆按钮的右侧显示文本BS AUTORADIOBUTTON同BS RADIOBUTTON ,不过单击时按钮会自动反转BS_3STATE冋BS_CHECKBOX,不过控件有三种状态:选中、未选中和无 效BS_AUTO3STATE同BS 3STATE,不过单击时按钮会改变状态BS_DEFPUSHBOTTON指定默认的命令按钮,这种按钮周围有一个黑框,用户可以按Enter键快速选择该按钮BS GROUPBOX指定一个组框BS LEFTTEXT使控件的标题显示在按钮的左边BS OWNERDRAW指定一个自绘式按钮BS PUSH

59、BOTTON指定一个命令按钮除了表3-6中列出的风格外,一般还要为控件指定 WS_CHILD、WS_VISIBLE和WS_TABSTOP风格。对于用对话框模板编辑器创建的按钮控件,可以在控件的 属性对话框中指定表3-6中列出的风格。在MFC应用中,类CBotton的主要成员函数如下。UNIT GetState () const;该函数返回按钮控件的各种状态,可以用下列值与函数的返回值相与,以获 得各种信息。0 x0003用来获取检查框或单选按钮的状态。0表示未选中,1表示选中,2表 示不确定状态(仅用于检查框)。0 x0004用来判断按钮是否是咼亮度显示的。非零意味着按钮是咼亮显示。当 用户单

60、击了按钮并按住鼠标左键时,按钮会呈高亮度显示。0 x0008非零值表示按钮拥有输入焦点。void SetState (BOOL bHighlight);当参数bHighlight值为TRUE时,该函数将按钮设置为高亮度状态,否则去 除按钮的高亮度状态。int GetCheck () const;返回检查框或单选按钮的选择状态。返回值0表示按钮未被选择,1表示按钮被选择,2表示按钮处于不确定状态(仅用于检查框)。void SetCheck (int nCheck );设置检查框或单选按钮的选择状态。参数nCheck值的含义与SetCheck返回值 相同。UNIT GetButt on Style

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论