Egg安装和使用手册.docx
- 文档编号:20118021
- 上传时间:2023-04-25
- 格式:DOCX
- 页数:42
- 大小:555.66KB
Egg安装和使用手册.docx
《Egg安装和使用手册.docx》由会员分享,可在线阅读,更多相关《Egg安装和使用手册.docx(42页珍藏版)》请在冰豆网上搜索。
Egg安装和使用手册
目录
在VC6上编写、运行、调试C语言程序2
前言2
编辑、编译与运行2
VC6调试技术6
设置断点6
调试运行7
自定义监视变量9
进一步学习11
Egg安装和使用11
简介11
下装11
安装12
使用Egg编写第一个程序12
建立工程12
编写代码13
运行程序15
进一步学习17
Egg基本绘图17
基本知识17
坐标系统17
画笔当前位置18
初始化18
直线19
曲线19
正圆曲线19
椭圆曲线20
字符串20
贴图20
Egg高级绘图21
画笔颜色和宽度21
字体22
填充22
Egg动画功能22
下蛋22
画蛋22
动蛋23
其它25
Egg交互功能26
事件26
按键处理26
WaitForEvent()初探26
按不同键做不同事27
处理同时按下的键28
鼠标移动28
定时器29
WaitFor()29
StartTimer()&StopTimer()29
备份、升级、发布我自己的Egg程序30
备份31
升级31
发布31
本文档资料来自网址:
1.在VC6上编写、运行、调试C语言程序
前言
TurboC2.0发布于1989年,对历史并不太长而发展却神速的IT业来说,确实是古董级的软件了。
但它几乎是最后一个专门为C语言设计的开发环境,具备学习C语言的一切条件,没有任何非C语言的东西干扰初学者,所以一直被各大高校的C语言课堂采用。
C++的发展使C++的开发环境大行其道。
因为C++几乎完全兼容C语言,两者无论编译器还是编辑器、调试器都可以用同一套程序实现,而且C++共享C的库函数,很多软件还是用两者混合编程实现,所以基本所有的C++环境都同时支持C语言。
美国微软公司出品的VisualC++(以下简称VC)是Windows平台上最流行的C/C++集成开发环境。
从1993年发行1.0版本开始,历经多年锤炼,于2003年推出最新的7.0版本(VisualC++.NET2003)。
本文将介绍如何在流传更广泛的6.0版本下开发C语言程序。
编辑、编译与运行
VC6强大的AppWizard并不支持生成C语言工程,我们需要独辟蹊径。
如下图所示,首先点击“新建”按钮建立一个空的文本文件。
然后,我们点击“保存按钮”或者按“ctrl+s”保存这个文件,扩展名一定要是“.c”,如下图所示:
现在,我们可以在文件中输入我们的源代码开始编写程序了,当程序编写完成之后,我们按“编译”按钮或“F7”开始编译它,不过在编译之前,VC先会弹出对话框,询问是否建立一个缺省的项目工作区。
VC必须有项目才能编译,所以这里必须回答“Yes”。
系统会在保存.c文件的目录里自动生成与c源程序文件同名的.dsw和.dsp等文件。
以后可以直接打开这些文件来继续编写程序,不必再重复上面的过程。
此后,系统会自动完成编译操作,并且在信息输出窗口中输出相关信息,如图所示:
上图就是我们在学习C语言时常常需要与之打交道的开发环境了,下面我们就来简单的熟悉一下它:
∙编译:
即编译当前文件
∙Build:
编译项目中的所有文件,并把它们链接到一起
∙中止编译:
在编译的时候,可以点击此按钮中止编译过程
∙运行:
运行程序。
如果程序未被Build,它们先Build然后再运行
∙调试运行:
用调试器运行程序,此时,你可以通过设置断点、单步执行等多种方式跟踪程序的运行状况。
有关调试方面的更多的内容会在后面的部份详细介绍
∙设置或取消断点:
可以在当前行设置一个或取消一个断点,这在后面介绍调试的部份详细介绍。
∙文件及函数浏览器:
可以浏览整个项目中的所有函数、全局变量以及所有文件。
双击文件名,可以在右边的代码编辑器中打开相应文件。
双击函数名或全局变量名,可以在右边的代码编辑器中打开此函数或全局变量所在的文件并定位到函数体内或全局变量声明的地方
∙代码编辑器:
输入代码用
∙信息输出窗:
系统用来输出一些信息。
比如上面在执行编译时,系统就会输出编译的结果,一般是编译器在程序中发现的错误或者一些警告。
如果编译器没有发现错误(error)及警告(warning),那么你会在最后一行看见“0error(s),0warning(s)”的字样。
注意:
在写程序时应当认真而小心的对待每一个warning,最好把它们都当做error对待。
在编译完成之后,我们就可以按“运行(ctrl+F5)”或者“调试运行(F5)”来运行我们的程序了。
在以后的使用中,我们可以直接按“运行”或“调试运行”而不需要单独进行编译,因为当你按“运行”或“调试运行”的时候它会自动的检测程序是否需要重新编译,如果需要,则会弹出一个对话框询问你是否同意重新编译,你只需在此时点击“Yes”,它就会自动重新编译、连接程序后再运行,非常方便。
VC6调试技术
用VC6进行程序的调试是非常方便的,我们可以在任一行设置一个断点,当程序执行到断点所在的行时就会暂时停住,此时,你可以单步执行程序(即一次只执行一条语句),并查看此时各种变量的值,下面我们就来看看如何使用VC6的调试功能。
设置断点
我们先输入一小段程序,然后在程序中设置一个断点,如下图所示:
调试运行
现在我们点击工具栏上的“调试运行按钮(F5)”,这时程序将自动编译、连接、运行,然后停在我们所设定的断点的行上。
设置断点后,我们可以看见当前行的最左端有一个暗红色的大圆点,如下图所示:
上图就是我们这里将要详细介绍的调试界面:
∙继续运行:
表示继续执行程序,直到碰见下一个断点时为止
∙重新运行:
表示重新从头开始运行程序
∙停止调试:
表示中止现在的调试界面,返回到代码编写界面
∙进入函数内:
单步执行命令。
如果下一条即将执行的语句是一条函数调用语句,那么就进入到函数体内
∙越过函数:
单步执行命令。
如果下一条即将执行的语句是一条函数调用语句,它不会进入函数体内,而是直接执行整个函数,并停到函数返回后的第一条语句上
∙运行到光标所在的行:
表示继续执行程序,直到运行到光标所在的行为止
∙快速查看变量:
它可以允许程序员自定义想要监视的变量,并在“指定变量显示区”显示
∙代码所在的上下文:
表明当前执行的语句所在的函数
∙当前变量显示区:
与当前执行语句有关的变量的值
从图中可见,现在程序已经在我们当时设置的断点处停住了,最左端的黄色箭头指示着即将运行的下一条语句。
这个时候我们可以看见“当前变量显示区”中有一个变量,名为“all”,值为“-858993460”,由于这条语句现在还没有执行,因此,这个值是一个随机值,无实意。
现在我们点击工具栏上的“进入函数内(F11)”的按钮,由于这条语句会调用函数“sum()”,因此它会进行到“sum()”函数体内去执行,如下图所示:
我们可以反复执行“单步执行命令”(即工具栏上的“进入函数内”、“越过函数”按钮)来观察程序的流程。
自定义监视变量
通过“Debug”菜单上的“快速查看变量”我们可以设定我们想要监视的变量,并在“指定变量显示区”中显示。
现在我们点击“Debug”菜单上的“快速查看变量”命令(Debug|QuickWatch...),将弹出如下的对话框:
我们可以在最上面的输入框中输入我们想查看的变量的变量名或者表达式,然后我们可以点击“Recalculate”按钮获到这个变量或表达式现在的值,这个值将在下面的显示区中显示,然后我们可以点击“AddWatch”按钮把这个变量或表达式加入到“指定变量显示区”中,如下图所示:
进一步学习
VC6还可以直接调试汇编代码,查看cpu各寄存器的状态等,但不是很常用,这里就不在介绍了,感兴趣的朋友可以查看VC6的用户手册。
2.Egg安装和使用
简介
Egg是由哈尔滨工业大学计算机科学与技术学院教师孙志岗开发的一个开放源代码软件,采用GPL协议。
它的设计目标是开发一个极其简单、直观的Win32平台下的图形动画函数库,C语言的初学者可以使用它开发动画、游戏等图形程序,让C语言的学习过程变得更有趣,更有成就感。
有关Egg的详细介绍,可以访问Egg的主页:
下装
最新的Egg发行包可以到
安装
Egg的发行包是一个可直接运行的安装程序,直接运行并根据提示选择你需要的组件。
如果安装过程有困扰,就所有选项都使用缺省设置,一路点击“下一步”即可。
使用Egg编写第一个程序
建立工程
安装完毕后,运行VisualC++6.0,从菜单依次点击File|New,然后在弹出的菜单中选择“C语言应用开发向导”,并输入项目名,如下图所示:
随后,点击Ok,会弹出如下的一个对话框,这是Egg的设置界面:
它有如下的一些设置选项:
●使用Egg平台:
它表示我们会在程序中使用Egg所提供的函数等。
如不选择,就建立一个普通的C语言工程。
●静态库方式:
使用这种方式,我们在程序中可以调用Egg所提供的函数,但不能看到Egg的源码。
此种方式对程序员要求较低,适合于初学者使用。
●源代码方式:
使用这种方式,Egg的源码就成为我们程序本身的一部份,我们不仅可以使用Egg所提供的函数,而且可以看到Egg的源码,甚至可以修改Egg源码而完成一些Egg本身未提供的功能。
此种方式对程序员有一定要求,适合于高级用户使用。
这里我们选择“静态库方式”,直接点击“Finish”按钮完成设置。
这样,我们的第一个使用Egg的工程便建立起来了,接下来,我们将为其编写代码。
编写代码
我们展开最左边的类视图,并双击“main()”函数,系统将在右边打开“main()”函数所在的文件,并定位到“main()”函数内,这样我们就可以开始编写代码了,如下图所示:
现在,在“main()”函数内键入如下的一段代码:
EggStart(5,5);//打开一个5厘米见方的Egg窗口
DrawLine(5,-5);//从初始位置(左上角)开始,
//向X轴正方向偏移5厘米,Y轴负方向偏移5厘米,
//画一条直线。
WaitForExit();//等待用户关闭窗口
如下图所示:
运行程序
编写完代码之后,我们就可以编译、运行这个程序,来看看我们这段代码所产生的最后的结果。
要达到这个目的可以直接点击工具栏上的“!
”按钮来完成,如下图所示:
随后,系统将弹出一个对话框询问你是否需要编译源程序,直接点击“OK”,系统会自动的编译并连接Egg的代码库,然后运行程序,下图就是运行结果:
进一步学习
Egg提供了很多函数,你可以灵活的使用它们以绘制出更多更绚丽的图画,下面一些资源可能是你在学习使用Egg的过程中所需要的:
3.Egg基本绘图
基本知识
只要了解Egg的坐标系统,就可以马上开始图形编程之旅。
坐标系统
Egg的坐标系统采用我们最熟悉的平面直角坐标系,左下角是坐标原点,X坐标向右递增,Y坐标向上递增,单位是厘米。
如右图:
画笔当前位置
在Egg中有一个画笔,尽管我们看不到它,但它确确实实存在。
画笔指向的位置的坐标就是画笔的当前位置,简称画笔位置。
所有绘图操作都是从画笔位置开始落笔绘图,按照绘图要求移动画笔,并把最后提笔结束的位置作为新的画笔位置。
MovePen()可以移动画笔位置到新的绝对坐标。
voidMovePen(doublex,doubley);
OffsetPen()按相对当前位置的位移移动画笔。
voidOffsetPen(doubledx,doubledy);
初始化
只要调用一个函数——EggStart()——就完成所有初始化Egg平台的工作,参数更简单到只有两个:
绘图窗口的宽和高,单位厘米。
voidEggStart(doublefWidth,doublefHeight);
你不需要考虑Egg的结束问题。
只要程序正常退出,Egg占用的所有资源都会被自动释放。
直线
用DrawLine()从画笔当前位置,按照参数指定的位移画一条直线。
例如下面代码将以当前位置为左上角,绘制一个边长为1厘米的正方形,并连接其对角线。
//绘制正方形
DrawLine(1,0);
DrawLine(0,-1);
DrawLine(-1,0);
DrawLine(0,1);
//绘制对角线
DrawLine(1,-1);
OffsetPen(0,1);
DrawLine(-1,-1);
曲线
正圆曲线
绘制正圆和曲线都使用DrawArc()。
voidDrawArc(doubler,doubledStart,doubledSweep);
参数r是曲线所在圆的半径,单位厘米。
dStart是曲线开始点在圆周上的角度,dSweep是曲线沿圆周按逆时针方向扫过的角度。
如右图所示,其中粗黑曲线是下面代码所绘:
DrawArc(2,45,90);
如dSweep使用负数,就是沿圆周按顺时针方向画曲线,例如下面代码会画一个向上凹的半圆:
DrawArc(2,0,-180);
下面代码绘制一个完整的圆:
DrawArc(2,0,360);
它和下面代码等价:
DrawArc(2,0,-360);
椭圆曲线
椭圆和椭圆曲线使用DrawEllipticalArc(),原型如下:
voidDrawEllipticalArc(doublerx,doublery,doubledStart,doubledSweep);
参数dStart和dSweep的含义与DrawArc完全相同。
rx是该椭圆在x轴的半径,ry是在Y轴的半径。
字符串
在Egg里输出字符串非常简单,只需要一个简单的函数——DrawString()。
voidDrawString(char*pString);
例如,要输出"HelloWorld",使用如下代码:
DrawString("HelloWorld");
字符串的左上角位于当前的画笔位置,输出后画笔位置移动到字符串的右上角。
贴图
Egg支持.bmp文件的贴图,使用下面函数:
voidDrawBitmap(char*lpszFilename);
参数是bmp文件名,例如要贴当前目录下的“beauty.bmp”文件,可以使用下面语句:
DrawBitmap("beauty.bmp");
位图的左上角位于画笔当前位置,贴图后,当前位置移动到位图的右上角。
4.Egg高级绘图
利用基本绘图功能,可以绘画复杂的单线条图形,但如果想要图案更加绚丽多彩,就要使用高级绘图功能。
画笔颜色和宽度
名称
颜色
BLACK
DARK_BLUE
DARK_GREEN
DARK_CYAN
DARK_RED
DARK_MAGENTA
DARK_YELLOW
LIGHT_GRAY
DARK_GRAY
BLUE
GREEN
CYAN
RED
MAGENTA
YELLOW
WHITE
TRANSPARENT_COLOR
透明色,用它绘图可以起到擦除效果
函数SetPen()改变画笔的颜色和宽度,从此都用指定的颜色和宽度绘画各种图形、文字,直到下次调用相关函数为止。
voidSetPen(unsignedlongcolor,doublefWidth);
fWidth是宽度,单位厘米。
color是颜色,有如右表的颜色可供选择。
如果只想单独改变颜色或宽度,可以调用SetPenColor()和SetPenWidth()。
例如设置画笔为红色,且宽度是0.1厘米,使用如下语句:
SetPen(RED,0.1);
它等价于
SetPenColor(RED);
SetPenWidth(0.1);
字体
此功能未完成,//blush
填充
此功能未完成,//blush
5.Egg动画功能
Egg的一大特色是其对egg的支持(注意大小写的区别)。
首字母大写的“Egg”,表示Egg平台;小写的“egg”,是Egg独有的一个概念,它是在Egg中最小的动画单元,可以单独在每个egg上绘画,并随意移动每个egg,达到动画效果。
下蛋
有了蛋,才能对其煎炒烹炸,所以我们先学学怎么下蛋。
每次调用LayEgg()都会生成一个新的egg,并把这个egg的句柄返回给你。
HEGGLayEgg(void);
此句柄的用处后面再介绍。
egg的大小与调用EggStart()时指定的大小一致,并且覆盖整个盘子(盘子是Egg图形窗口的昵称),但它初始状态是透明的。
理论上可以下无数的蛋,但注意不要下太多的蛋,否则撑破你的内存。
每个蛋都是相对独立的,可以绘画、移动任何一个蛋,而不会影响其它的蛋。
当两个蛋重合,后下的蛋会覆盖先下的蛋。
使用ChangeEggLayer()可以改变egg的层次,调整互相之间的覆盖关系。
画蛋
其实在使用基本绘图功能时,就已经画蛋了,只是因为Egg由浅入深的设计,使你感觉不到egg的存在。
执行完EggStart()后,便已经偷偷建立了一个egg,所有的绘图操作,都是在这个egg上进行的。
当LayEgg()后,再执行绘图操作,就是在新的egg上绘图了。
每次调用LayEgg()都是这样的效果。
如果想回头在旧egg上绘图,怎么办?
使用SetActiveEgg()函数。
voidSetActiveEgg(HEGGhEgg);
把每次LayEgg()的返回值(egg的句柄)保存下来,当要控制某个egg时,就把此句柄作为参数给SetActiveEgg()函数,那么这个egg就成为“活动蛋”,此后的各种操作都将加诸其上。
LayEgg()刚刚下的蛋不需要经过SetActiveEgg()的过程,会自动成为活动蛋。
下面例子下了5个蛋,并在每个蛋上画大小不同的一个半圆。
#include"egg.h"
#defineNUMBER_OF_EGG5
intmain(void)
{
HEGGhEggs[NUMBER_OF_EGG];
inti;
EggStart(10,5);
for(i=0;i { hEggs[i]=LayEgg(); DrawArc(i+1,180,180); } WaitForExit(); return0; } 这里没有使用SetActiveEgg(),也看不出下蛋有何好处。 但在下面一节,你将见到egg的妙处。 动蛋 最激动人心的动画开始了! 目前Egg还只支持简单的动画,就是挪动活动egg到篮子内的任何位置,通过MoveEgg()和OffsetEgg()实现。 voidMoveEgg(doublex,doubley); voidOffsetEgg(doubledx,doubledy); 这里的(x,y)是egg左上角在盘子内的坐标,(dx,dy)是在盘子坐标系内的位移。 需要特别注意的是,绘画操作所采用的坐标系是每个egg自己的独立坐标,而不是盘子坐标。 也就是说,绘画时,不需要考虑egg在盘子内的位置,egg自己的左下角永远是坐标原点。 下面例子在上面例子的基础上,让半圆动了起来。 #include"egg.h" #defineNUMBER_OF_EGG5 intmain(void) { HEGGhEggs[NUMBER_OF_EGG]; inti; EggStart(10,5); for(i=0;i { hEggs[i]=LayEgg(); DrawArc(i+1,180,180); } i=0; while(WaitFor(100)) { SetActiveEgg(hEggs[i]); OffsetEgg((NUMBER_OF_EGG-i-1)*0.1,0); if(i i++; else i=0; } return0; } 不过这段程序的动画效果并不好,曲线都是先后动的,并没有一起动。 下面代码利用Egg1.02版以后提供的SetAutoUpdate()和Update(),使动画看起来更美观。 #include"egg.h" #defineNUMBER_OF_EGG5 intmain(void) { HEGGhEggs[NUMBER_OF_EGG]; inti; EggStart(10,5); SetAutoUpdate(0); for(i=0;i { hEggs[i]=LayEgg(); DrawArc(i+1,180,180); } Update(); i=0; while(WaitFor(100)) { SetActiveEgg(hEggs[i]); OffsetEgg((NUMBER_OF_EGG-i-1)*0.1,0); if(i i++; else { i=0; Update(); } } return0; } 其它 如果想临时显示或隐藏某egg,可以使用ShowEgg()。 如果不再需要某个egg,可以使用EatEgg()将其永久删除 6.Egg交互功能 Egg有方便的人机交互功能,可以自如地响应用户的各种输入动作,包括键盘和鼠标,并有一个易用的定时器。 事件 事件(Event)是Egg平台交互功能的核心。 所有的鼠标、键盘动作,还有周期定时都被看作是一个事件,通过函数WaitForEvent()将最新发生的事件类型返回给程序,程序根据事件类型决定下一步的动作。 EVENT_TYPEWaitForEvent(void); EVENT_TYPE是Egg自定义的一个数据类型,取值和含义如下表: 值 含义 EXIT 窗口关闭事件。 用户点窗口右上角的“x”按钮或按Alt+F4都会触发这个事件。 TIMER 定时周期事件。 参见: Egg交互功能#定时器 MOUSEMOVE 鼠标移动事件。 鼠标在窗口内移动,就会触发这个事件。 KEYDOWN 按下按键事件。 键盘或鼠标按键被按下时触发此事件。 可用GetStruckKey()得知哪个键被按下。 KE
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Egg 安装 使用手册
![提示](https://static.bdocx.com/images/bang_tan.gif)