DEVC工程预处理和EGG图形库实用教案

上传人:cn****1 文档编号:568609750 上传时间:2024-07-25 格式:PPT 页数:87 大小:2.49MB
返回 下载 相关 举报
DEVC工程预处理和EGG图形库实用教案_第1页
第1页 / 共87页
DEVC工程预处理和EGG图形库实用教案_第2页
第2页 / 共87页
DEVC工程预处理和EGG图形库实用教案_第3页
第3页 / 共87页
DEVC工程预处理和EGG图形库实用教案_第4页
第4页 / 共87页
DEVC工程预处理和EGG图形库实用教案_第5页
第5页 / 共87页
点击查看更多>>
资源描述

《DEVC工程预处理和EGG图形库实用教案》由会员分享,可在线阅读,更多相关《DEVC工程预处理和EGG图形库实用教案(87页珍藏版)》请在金锄头文库上搜索。

1、2.模块化和工程(gngchng)模块的定义一般把用一个名字就可调用的一段程序称为“模块”,如子程序、函数等。模块的基本属性:功能:描述该模块实现什么功能逻辑:描述模块内部怎么做状态:该模块使用时的环境(hunjng)和条件除了基本属性,还需描述模块的内部和外部特性模块的外部特性:模块的模块名、参数表模块的内部特性:完成其功能的程序代码和仅供该模块内部使用的数据通常是先确定模块的外部特性,再确定其内部特性。第1页/共86页第一页,共87页。1.使用工程组织(zzh)多个源文件函数是最小的模块,若干个紧密相关(xinggun)的函数可以组成更大的模块源文件。一条好的原则就是保持模块的紧凑性即在同

2、一个源文件中只包含那些在逻辑上与其相关 (xinggun)的函数。第2页/共86页第二页,共87页。1.使用工程组织(zzh)多个源文件模块(mkui)化:把程序划分成独立命名且可独立访问的模块(mkui),每个模块(mkui)完成一个子功能,所有模块(mkui)集成起来构成的整体可完成用户的所有需求。模块(mkui)化意义降低了系统的复杂性,使系统容易修改和重用;推动系统各部分的并行开发,提高开发效率。复杂问题较小问题高层(ocn)模块从整体上把握问题,隐蔽细节分解第3页/共86页第三页,共87页。1.使用工程(gngchng)组织多个源文件使用工程来组织多个源文件。将功能紧密相关的若干个函

3、数组成(zchn)单独的源文件。对应于每一个提供通用功能的源文件,建立头文件。#include“ListNode.h”自定义的头文件,该文件在工程所在目录下#include“E:/temp/MyType.h“自定义的头文件,该文件不在工程所在目录下#include标准库函数头文件第4页/共86页第四页,共87页。1.使用工程组织(zzh)多个源文件实例:猴子(huzi)选大王源文件的分割头文件的使用使用工程组织多个源文件第5页/共86页第五页,共87页。在DEV-C+集成开发环境中:1.创建工程文件(.dev)文件/新建/工程,在弹出窗口中选择ConsoleApplication2、往项目中增

4、加源文件(.c)工程/新建单元新建一个源文件加到项目中或者工程/添加将已有的一个源文件加到项目中3、编译、链接、运行,查看结果(jigu)运行/编译编译项目中所有源文件或者运行/编译当前文件编译当前源文件或者运行/编译运行编译项目中所有源文件、链接、运行DEV-C+下工程(gngchng)的创建第6页/共86页第六页,共87页。一.新建工程1.点击菜单(cidn):文件-新建-工程.DEV-C+下工程(gngchng)的创建第7页/共86页第七页,共87页。2.在弹出窗口的Basic页中选择ConsoleApplication,输入工程名称,选择是c工程,点击(dinj)确定。DEV-C+下工

5、程(gngchng)的创建第8页/共86页第八页,共87页。3.此时弹出对话框,要求指定工程存放路径(ljng)(如G:temptestProject)。选择好路径(ljng)后点击保存。DEV-C+下工程(gngchng)的创建第9页/共86页第九页,共87页。4.此时系统自动加入main.c文件(wnjin)如下。里面代码是系统自动生成的。DEV-C+下工程(gngchng)的创建第10页/共86页第十页,共87页。二.往工程中增加已创建的其他(qt)文件将linkNode.h、link.c和link.h三个文件拷贝到工程所在目录G:temptestProject下然后点击菜单工程-添加D

6、EV-C+下工程(gngchng)的创建第11页/共86页第十一页,共87页。在弹出的对话框中选择要添加的源文件。然后(rnhu)点击打开。DEV-C+下工程(gngchng)的创建第12页/共86页第十二页,共87页。此时在工程(gngchng)管理(Project)页中出现了加入这3个文件DEV-C+下工程(gngchng)的创建第13页/共86页第十三页,共87页。在工程管理页中鼠标左键点击link.c,则右边(yubian)的代码区出现该文件的源代码。DEV-C+下工程(gngchng)的创建第14页/共86页第十四页,共87页。DEV-C+下工程(gngchng)的创建保存main.

7、c在右边的代码区选择main.c,然后(rnhu)Ctrl+S进行保存,此时弹出对话框,询问保存的目录。第15页/共86页第十五页,共87页。三.编译(biny)文件若选择编译(biny)(CtrlF9),则编译(biny)当前工程中的所有文件。若只是想单独编译(biny)一个文件,则选择编译(biny)当前文件(Shift+CtrlF9)。DEV-C+下工程(gngchng)的创建第16页/共86页第十六页,共87页。DEV-C+下工程(gngchng)的创建编译成功(chnggng)后,在工程所在目录G:temptestProject中包含文件如下双击.exe即可运行程序。也可使用(shy

8、ng)Execute菜单下的Run菜单运行程序。.dev是工程文件。双击该文件即可在DevC+环境中打开工程。第17页/共86页第十七页,共87页。四、在当前(dngqin)工程中新建一个文件如果要新建文件并将其添加到工程中,则选择菜单工程-新建单元DEV-C+下工程(gngchng)的创建第18页/共86页第十八页,共87页。此时将加入一个文件(未命名3)。选择(xunz)保存时,指定该文件的名字和保存路径(一般和工程在同一路径下)。如下图所示DEV-C+下工程(gngchng)的创建第19页/共86页第十九页,共87页。五.从工程中移除一个文件。如下图所示。注意:此时该文件在磁盘(cpn)

9、里还是存在,只是不包含在当前工程中了。DEV-C+下工程(gngchng)的创建第20页/共86页第二十页,共87页。DEV-C+下工程(gngchng)的创建注意:添加一个已存在的文件到工程(gngchng)中时,该文件也可以不位于工程(gngchng)所在路径下。假设工程(gngchng)位于D:tempproject目录下,要加入工程(gngchng)的linkNode.h、link.h和link.c位于其他目录,则编译后工程(gngchng)所在目录如下,并没有将上述三个文件复制到工程(gngchng)目录下(其时在文件.dev中记录着上述3个文件的磁盘路径)第21页/共86页第二十一

10、页,共87页。在VC6开发(kif)环境中:1.点击File-New弹出菜单(如下图)VC6环境(hunjng)下工程的创建第22页/共86页第二十二页,共87页。2.选择Projects选项卡,选择Win32ConsoleApplication,在Projectname文本框输入工程名(如elevator),在Location文本框选择路径(ljng)如(如C:test)(见下图)点击OKVC6环境(hunjng)下工程的创建第23页/共86页第二十三页,共87页。3.点击(dinj)Finish(如下图)VC6环境下工程(gngchng)的创建第24页/共86页第二十四页,共87页。4.点

11、击(dinj)OK(如下图)VC6环境下工程(gngchng)的创建第25页/共86页第二十五页,共87页。5.把所有(suyu)源文件例elevator.c、elevator.h文件拷贝到工程所在目录下(如C:TEST)。VC6环境下工程(gngchng)的创建第26页/共86页第二十六页,共87页。6.点击左下角的FileView(如下图红色圈所示),再鼠标右键点击SourceFiles(如下图红色箭头所示),选择(xunz)AddFilestoFolder,选择(xunz)文件将elevator.c加入到SourceFiles目录,鼠标右键点击HeaderFiles,选择(xunz)Ad

12、dFilestoFolder,选择(xunz)文件将elevator.h加入到HeaderFiles目录(结果如下图)VC6环境下工程(gngchng)的创建第27页/共86页第二十七页,共87页。7.选择(xunz)主菜单Project-Settings(工程-设置)出对话框(如下图)VC6环境(hunjng)下工程的创建第28页/共86页第二十八页,共87页。VC6环境(hunjng)下工程的创建8.点击左边树状导航(dohng)栏elevator,点击右边选项卡Link,找到Object/librarymodules:文本框,在最后添加两项Msimg32.lib、egg.lib(如图)点

13、击OK第29页/共86页第二十九页,共87页。9.这样就可以(ky)编写自己的主程序了,比如在SourceFile目录下建立main.c文件,main.c应包含前面的elevator.h(如下图)VC6环境下工程(gngchng)的创建第30页/共86页第三十页,共87页。提纲(tgng)1.使用工程组织(zzh)多个源文件2.预处理命令3.Egg图形库说明第31页/共86页第三十一页,共87页。预处理指令(zhlng)#include预处理指令(zhlng)#define:符号常量预处理指令(zhlng)#define:宏条件编译提纲(tgng)第32页/共86页第三十二页,共87页。预处理

14、指令(zhlng)#define:宏#define用来定义符号常量(用符号表示的常量)。宏(用符号定义的操作)。宏宏用来替代一个字符串,类似(lis)于符号常量,宏在预处理时被替换字符串取代。不带参数的宏:预处理程序就像处理符号常量一样处理不带参数的宏。带参数的宏:先用替换文本取代参数,然后再把宏展开。第33页/共86页第三十三页,共87页。预处理指令(zhlng)#define:宏带参数的宏定义格式:#define标识符(形式参数表)字符串形式参数表由逗号(duho)分割开的标识符组成,这些标识符在字符串中出现。如:#definePI3.14159/常量定义#defineCIRCLE_ARE

15、A(x)(PI*(x)*(x)#defineMAX(x,y)(x)(y)?(x):(y)#defineNUL(x,y)(x)*(y)第34页/共86页第三十四页,共87页。预处理指令(zhlng)#define:宏宏调用格式:标识符(实在参数表)如:area=CIRCLE_AREA(3+4);宏在预处理时被展开:1.替换参数:文件中如果出现宏调用CIRCLE_AREA(3+4),则字符串中的x都用3+4替代;2.用字符串取代程序(chngx)中的宏调用。语句area=CIRCLE_AREA(3+4);在预处理时将被展开成area=(3.14159*(3+4)*(3+4);(3.14159*(3

16、+4)*(3+4)预处理时被展开(zhnki)第35页/共86页第三十五页,共87页。预处理指令(zhlng)#define:宏需要注意的是,在宏名和括起参数的括号之间绝对不能有空格。此外,为了避免在翻译宏时产生歧义,宏体和参数也应该用括号括起来。例如,象下例中这样定义宏CIRCLE_AREA是不正确(zhngqu)的:defineCIRCLE_AREA(x)PI*x*x如:inta=3,b=4;语句area=CIRCLE_AREA(a+b);将被展开成3.14159*a+b*a+b;第36页/共86页第三十六页,共87页。预处理指令(zhlng)#define:宏使用宏还是函数宏与函数相比有

17、一个明显的优势,即它比函数效率更高(并且更快),因为宏可以直接在源代码中展开,而调用函数还需要额外的开销。但是,宏一般比较小,无法处理(chl)大的、复杂的代码结构,而函数可以。此外,宏需要逐行展开,因此宏每出现一次,宏的代码就要复制一次,这样你的程序就会变大,而使用函数不会使程序变大。第37页/共86页第三十七页,共87页。条件编译使编译器能够按照(nzho)不同条件编译不同的程序部分,产生不同的目标代码文件。两种条件编译:使用常量表达式判断、使用宏定义名判断条件(tiojin)编译第38页/共86页第三十八页,共87页。条件(tiojin)编译1.使用(shyng)常量表达式判断(共3种)

18、#if整型常量表达式文本(wnbn)1#else其他文本(wnbn)#endif#if整型常量表达式文本1#endif第1种情况第2种情况首先求常量表达式的值,然后根据常量表达式值是否为0进行下面的条件编译。在第2种情况中,如果该表达式的值非0,则编译文本1,否则编译其他文本。#if整型常量表达式1文本1#elif整型常量表达式2文本2#else其他文本#endif第3种情况第39页/共86页第三十九页,共87页。条件(tiojin)编译让编译器不编译某一段代码:#if0不编译的代码#endif以后(yhu)若想让编译器编译该段代码,只需要将0改成1第40页/共86页第四十页,共87页。条件(

19、tiojin)编译2.使用宏定义(dngy)名判断#ifdef标识符文本(wnbn)1#else文本(wnbn)2#endif#ifndef标识符文本1#endif如果定义了标识符为宏(即使宏体为空),则为真,编译#ifdef后面的文本;否则编译#else后面的文本#ifdef标识符文本1#endif第41页/共86页第四十一页,共87页。条件(tiojin)编译#ifdef标识符是#ifdefine(标识符)的缩写(suxi)#ifndef标识符是#if!define(标识符)的缩写(suxi)第42页/共86页第四十二页,共87页。条件(tiojin)编译调试阶段,若想打印(dyn)变量的

20、值,则代码如下:#defineDEBUG/定义宏,宏体为空#ifdefDEBUGprintf(“variablex=%dn”,x);printf(“variabley=%dn”,y);#endif完成调试后,可以去掉#define指令,这样就会在编译过程中忽略上述两条printf语句。第43页/共86页第四十三页,共87页。条件(tiojin)编译#include#defineDEBUG/定义(dngy)宏main()intage;charname20;printf(inputyouragen);scanf(%d,&age);printf(inputyournamen);scanf(%s,na

21、me);第44页/共86页第四十四页,共87页。条件(tiojin)编译#ifdefDEBUGprintf(inputageis:%dn,age);#endif#undefDEBUG/取消(qxio)宏定义#ifdefDEBUGprintf(inputnameis:%sn,name);#endifsystem(pause);return0;inputyourage30inputyournamejohninputageis:30请按任意键继续(jx).第45页/共86页第四十五页,共87页。条件(tiojin)编译怎样避免多次包含同一个头文件?在创建(chungjin)一个头文件时,你可以用#d

22、efine指令为它定义一个唯一的标识符名称。你可以通过#ifndef指令检查这个标识符名称是否已被定义,如果已被定义,则说明该头文件已经被包含了,就不要再次包含该头文件;反之,则定义这个标识符名称,以避免以后再次包含该头文件。 第46页/共86页第四十六页,共87页。猴子(huzi)选大王NodeType.h:#ifndef_NODETYPE_H#define_NODETYPE_HstructlistNodeintdata;structlistNode*nextPtr;typedefstructlistNodeLISTNODE;typedefLISTNODE*LISTNODEPTR;#endi

23、f#include“NodeType.h”#include“NodeType.h”main.c编译遇到第1条include指令,由于_NODETYPE_H未被定义,因此该头文件被包含(bohn),_NODETYPE_H被定义;编译遇到第2条include指令时,由于_NODETYPE_H已定义,因此该头文件将不再被包含(bohn)第47页/共86页第四十七页,共87页。其他(qt)预处理指令#error,#program运算符#和#行号#line预定义的符号常量宏assert第48页/共86页第四十八页,共87页。提纲(tgng)1.使用工程组织多个(du)源文件2.预处理命令3.Egg图形库

24、说明第49页/共86页第四十九页,共87页。图形库函数(hnsh)EGG简介可以把代码编译成库供其他人员调用。其他人员看不到源代码。两种库:静态链接库和动态链接库静态链接库在链接(link)的时候被连接到.exe文件(.LIB中的代码被包含(bohn)到.exe文件中了),导致应用程序比较大。当.LIB版本升级时,需要对调用该LIB的程序重新编译。.exeLIB第50页/共86页第五十页,共87页。图形库函数(hnsh)EGG简介.DLL(DynamicLinkLibrary):动态链接库DLL是一个包含可由多个程序同时使用的代码和数据的库。例如,在Windows操作系统中,Comdlg32D

25、LL执行(zhxng)与对话框有关的常见函数。因此,每个程序都可以使用该DLL中包含的功能来实现“打开”对话框。事先不被连接到.exe文件,在运行期才会被调用。1.exeDLL调用(dioyng)调用2.exe第51页/共86页第五十一页,共87页。图形库函数(hnsh)EGG简介动态链接(linji)库是分两步链接(linji)进程序中的:首先,在编绎的时候,链接(linji)器查找出程序需要的所有符号(函数,变量等等),然后链接(linji)进程序当中或者程序的另一个共享链接(linji)库当中。动态链接(linji)库中的目标文件并没有固化进可执行文件。替代的是,当程序运行的时候,由系统

26、的一个程序(叫做动态装载器dynamiclibraries)检查程序需要哪些动态链接(linji)库,然后把它们装入内存并且与内存中的程序关联。第52页/共86页第五十二页,共87页。图形库函数(hnsh)EGG简介DLL的优点使用较少的资源当多个程序使用同一个函数库时,DLL可以减少在磁盘和物理内存中加载的代码的重复量。这不仅可以大大影响在前台运行的程序,而且可以大大影响其他在Windows操作系统上运行的程序。推广模块式体系结构DLL有助于促进模块式程序的开发。简化部署和安装当DLL中的函数需要更新或修复时,部署和安装DLL不要求重新建立程序与该DLL的链接。此外,如果多个程序使用同一个D

27、LL,那么多个程序都将从该更新或修复中获益。当您使用定期更新或修复的第三方DLL时,此问题可能(knng)会更频繁地出现。第53页/共86页第五十三页,共87页。图形库函数(hnsh)EGG简介Egg提供2个静态链接库和1个头(tu)文件:egg.lib/静态链接库eggd.lib/静态链接库egg.h第54页/共86页第五十四页,共87页。图形库函数(hnsh)EGG简介EGG绘图功能:绘制直线绘制曲线(正圆和椭圆)绘制字符串贴图:.bmp文件设置画笔(hub)的颜色和线条粗细移动画面的某些部分(动画)第55页/共86页第五十五页,共87页。图形库函数(hnsh)EGG简介坐标(zubio)

28、系统采用我们最熟悉的平面直角坐标(zubio)系,左下角是坐标(zubio)原点,X坐标(zubio)向右递增,Y坐标(zubio)向上递增,单位是厘米坐标原点第56页/共86页第五十六页,共87页。图形库函数(hnsh)EGG简介画笔当前位置在Egg中有一个画笔,尽管我们看不到它,但它确确实实存在(cnzi)。画笔指向位置的坐标就是画笔的当前位置,简称画笔位置。所有绘图操作都是从画笔位置开始落笔绘图,按照绘图要求移动画笔,并把最后提笔结束的位置作为新的画笔位置。画笔的初始位置是画面的左上角,并非坐标原点(左下角)。画笔初始(chsh)位置第57页/共86页第五十七页,共87页。画笔相关(xi

29、nggun)函数voidMovePen (double x, double y)移动画笔位置到新的绝对坐标移动画笔位置到新的绝对坐标voidOffsetPen(double dx, double dy)按相对当前位置的位移移动画笔位移画笔位置按相对当前位置的位移移动画笔位移画笔位置doubleGetPenXPos (void)得到画笔的得到画笔的X坐标坐标doubleGetPenYPos (void)得到画笔的得到画笔的Y坐标坐标第58页/共86页第五十八页,共87页。图形库函数(hnsh)EGG简介初始化只要调用一个函数EggStart()就完成所有初始化Egg平台的工作(gngzu)。vo

30、idEggStart(doublefWidth,doublefHeight);参数:绘图窗口的宽和高,单位厘米。你不需要考虑Egg的结束问题。只要程序正常退出,Egg占用的所有资源都会被自动释放。第59页/共86页第五十九页,共87页。图形库函数(hnsh)EGG简介直线voidDrawLine(doubledx,doubledy)从画笔当前位置,按照参数指定的位移画一条直线。位移可以为正(沿X/Y坐标的正方向(fngxing)绘制)、也可为负(沿X/Y坐标的负方向(fngxing)绘制)voidline(void)EggStart(5,5);/初始化DrawLine(5,-5);/绘制直线W

31、aitForExit();/等待用户(yngh)关闭窗口第60页/共86页第六十页,共87页。图形库函数(hnsh)EGG简介正圆曲线voidDrawArc(doubler,doubledStart,doubledSweep);r:曲线所在(suzi)圆的半径,单位厘米。dStart:曲线开始点在圆周上的角度(即画笔在圆周上的角度)dSweep:曲线沿圆周按逆时针方向扫过的角度。DrawArc(2,45,90);第61页/共86页第六十一页,共87页。图形库函数(hnsh)EGG简介DrawArc(2,45,90);圆半径为2的圆可以有多个,但是画笔位置(wizhi)在圆周上角度为45的圆只有

32、一个。画笔位置(wizhi)、圆半径以及角度唯一确定一个圆。第62页/共86页第六十二页,共87页。voidyuan1(void)EggStart(4,4);OffsetPen(4,-2);/相对(xingdu)移动DrawArc(2,0,360);WaitForExit();voidyuan1(void)EggStart(4,4);OffsetPen(4,-1);/相对(xingdu)移动DrawArc(2,0,360);WaitForExit();第63页/共86页第六十三页,共87页。voidyuan1(void)EggStart(4,4);OffsetPen(2,-2);/相对(xin

33、gdu)移动DrawArc(2,0,360);WaitForExit();第64页/共86页第六十四页,共87页。图形库函数(hnsh)EGG简介椭圆(tuyun)曲线voidDrawEllipticalArc(doublerx,doublery,doubledStart,doubledSweep);参数dStart和dSweep的含义与DrawArc完全相同。rx是该椭圆(tuyun)在x轴的半径,ry是在Y轴的半径。第65页/共86页第六十五页,共87页。图形库函数(hnsh)EGG简介字符串voidDrawString(char*pString);例如(lr),要输出HelloWorld

34、,使用如下代码:DrawString(HelloWorld);字符串的左上角位于当前的画笔位置,输出后画笔位置移动到字符串的右上角。 HelloWorld第66页/共86页第六十六页,共87页。图形库函数(hnsh)EGG简介贴图Egg支持.bmp文件的贴图,使用下面函数(hnsh):voidDrawBitmap(char*lpszFilename);参数是bmp文件名,例如要贴当前目录下的“beauty.bmp”文件,可以使用下面语句:DrawBitmap(beauty.bmp);位图的左上角位于画笔当前位置,贴图后,画笔当前位置移动到位图的右上角。 图片(tpin)第67页/共86页第六十

35、七页,共87页。voidyuan1(void)EggStart(4,4);OffsetPen(2,-2);DrawArc(2,0,360);MovePen(2,2);DrawString(hello);DrawBitmap(pic.bmp);WaitForExit();第68页/共86页第六十八页,共87页。图形库函数(hnsh)EGG简介画笔颜色和宽度函数SetPen()改变画笔的颜色和宽度,从此都用指定的颜色和宽度绘画各种图形、文字,直到下次调用相关(xinggun)函数为止。voidSetPen(unsignedlongcolor,doublefWidth);fWidth是宽度,单位厘米

36、。color是颜色,取值见具体宏定义。如果只想单独改变颜色或宽度,可以调用voidSetPenColor(unsignedlongcolor)voidSetPenWidth(doublefWidth)第69页/共86页第六十九页,共87页。动画实现盘子(pnzi):白色窗口egg:任何图形都是画在一个egg上,每个egg都是相对独立的,可以绘画、移动任何一个egg,而不会影响其它的egg。只能以egg为单位进行移动。egg的大小与调用EggStart()时指定的大小一致,并且覆盖整个盘子(pnzi)(盘子(pnzi)是Egg图形窗口的昵称),但它初始状态是透明的。第70页/共86页第七十页,共

37、87页。可以画多个(du)egg,当两个蛋重合,后下的蛋会覆盖先下的蛋。使用ChangeEggLayer()可以改变egg的层次,调整互相之间的覆盖关系。第71页/共86页第七十一页,共87页。如何下蛋:每次调用LayEgg()都会生成一个新的egg,并把这个egg的句柄返回给你。HEGGLayEgg(void);执行完EggStart()后,便已经偷偷建立了一个egg,所有的绘图操作,都是在这个egg上进行(jnxng)的。当LayEgg()后,再执行绘图操作,就是在新的egg上绘图了。第72页/共86页第七十二页,共87页。如何设置活动蛋:绘图是在活动蛋上进行(jnxng)的;如果想回头在

38、旧egg上绘图,可以使用voidSetActiveEgg(HEGGhEgg)函数将旧的egg变成活动蛋因此,需要把每次LayEgg()的返回值(egg的句柄)保存下来,从而将旧蛋变成活动蛋;第73页/共86页第七十三页,共87页。#includeegg.h#defineNUMBER_OF_EGG5intmain(void)HEGGhEggsNUMBER_OF_EGG;inti;EggStart(10,5);for(i=0;iNUMBER_OF_EGG;i+)hEggsi=LayEgg();DrawArc(i+1,180,180);WaitForExit();/等待用户(yngh)关闭窗口ret

39、urn0;第74页/共86页第七十四页,共87页。如何动蛋voidMoveEgg(doublex,doubley);voidOffsetEgg(doubledx,doubledy);这里的(x,y)是egg左上角在盘子内的坐标,(dx,dy)是在盘子坐标系内的位移。需要特别注意的是,在egg上绘画时,所采用的坐标系是每个egg自己的独立坐标,而不是盘子坐标。也就是说,绘画时,不需要考虑egg在盘子内的位置(wizhi),egg自己的左下角永远是坐标原点。第75页/共86页第七十五页,共87页。/画5个能分别动起来的半圆(bnyun)voiddonghua1(void)HEGGhEggsNUMB

40、ER_OF_EGG;inti;EggStart(10,5);/画5个不同半径的半圆(bnyun)for(i=0;iNUMBER_OF_EGG;i+)hEggsi=LayEgg();DrawArc(i+1,180,180);第76页/共86页第七十六页,共87页。/让5个半圆分别(fnbi)移动i=0;while(WaitFor(100)SetActiveEgg(hEggsi);OffsetEgg(NUMBER_OF_EGG-i-1)*0.1,0);if(iNUMBER_OF_EGG-1)i+;elsei=0;第77页/共86页第七十七页,共87页。/画5个能同时动起来的半圆(bnyun)voi

41、ddonghua2(void)HEGGhEggsNUMBER_OF_EGG;inti;EggStart(10,5);SetAutoUpdate(0);/设置不自动更新屏幕for(i=0;iNUMBER_OF_EGG;i+)hEggsi=LayEgg();DrawArc(i+1,180,180);第78页/共86页第七十八页,共87页。Update();/也可以不要i=0;while(WaitFor(100)/定时器SetActiveEgg(hEggsi);OffsetEgg(NUMBER_OF_EGG-i-1)*0.1,0);if(iNUMBER_OF_EGG-1)i+;elsei=0;Upd

42、ate();/更新Egg窗口,将5个egg的分时移动模拟(mn)为同时动第79页/共86页第七十九页,共87页。第8周实验1)掌握VC6下工程(gngchng)的管理。2)掌握图形库Egg的库函数使用。第80页/共86页第八十页,共87页。移动的是当前的活动蛋(activeegg),该蛋上所有的图形都会一起动。如果只是想动整个图形的一部分(bfen)(如电梯、小火车),则该部分(bfen)一定要在一个独立的egg上绘制。移动一个egg之前,需要先通过函数voidSetActiveEgg(HEGGhEgg)将该egg设置为活动蛋。第81页/共86页第八十一页,共87页。4.3-Egg定时器1in

43、tWaitFor(unsignedintuMillisecond);这是一种很简单的定时器。调用此函数后,你的程序在uMillisecond毫秒内将什么也不做,静静地等待WaitFor()函数的返回。在需要延时的场合,这个函数是很好用的。但当用户关闭窗口的时候(shhou),它会立即返回,返回值为0。此时,我们要停止正在做的事情,转入退出流程。例:/让5个egg分别移动#include“egg.h”/先定义5个eggi=0;while(WaitFor(100)SetActiveEgg(hEggsi);OffsetEgg(NUMBER_OF_EGG-i-1)*0.1,0);if(iNUMBER_

44、OF_EGG-1)i+;elsei=0;第82页/共86页第八十二页,共87页。4.4-Egg定时器2voidStartTimer(unsignedintuMillisecond);voidStopTimer(void);这两个函数比WaitFor()稍微复杂一点儿,但它们的控制能力更精准,而且(rqi)可以和其它输入完全配合(WaitFor()在等待的时候,用户的所有输入动作都无效,除了关闭窗口)。StartTimer()后,每隔uMillisecond毫秒,都会产生一个TIMER事件,可以用WaitForEvent()得到这个事件,进而做相应的周期工作。不再需要定时事件时,调用StopTi

45、mer()停止它。第83页/共86页第八十三页,共87页。4.4-Egg定时器2EVENT_TYPEev;.StartTimer(500);while(ev=WaitForEvent()!=EXIT)switch(ev)caseTIMER:/响应(xingyng)周期事件break;caseKEYDOWN:/响应(xingyng)按键按下事件break;caseKEYUP:/响应(xingyng)按键抬起事件break;StopTimer();建议:定时器函数可以用在动画输出部分(bfen),控制对电梯画面的刷新。第84页/共86页第八十四页,共87页。第85页/共86页第八十五页,共87页。感谢您的欣赏(xnshng)!第86页/共86页第八十六页,共87页。内容(nirng)总结2.模块化和工程。功能:描述该模块实现什么功能。通常是先确定模块的外部特性,再确定其内部特性。降低(jingd)了系统的复杂性,使系统容易修改和重用。推动系统各部分的并行开发,提高开发效率。3. 此时弹出对话框,要求指定工程存放路径(如G:temptestProject)。编译成功后,在工程所在目录G:temptestProject中包含文件如下。也可使用Execute菜单下的Run菜单运行程序。感谢您的欣赏第八十七页,共87页。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号