Egg安装和使用手册_第1页
Egg安装和使用手册_第2页
Egg安装和使用手册_第3页
Egg安装和使用手册_第4页
Egg安装和使用手册_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

1、目录目录在在 VC6 上编写、运行、调试上编写、运行、调试 C 语言程序语言程序.2前言前言.2编辑、编译与运行编辑、编译与运行.2VCVC 6 6 调试技术调试技术.6设置断点设置断点.6调试运行调试运行.7自定义监视变量自定义监视变量.9进一步学习进一步学习.11EGGEGG 安装和使用安装和使用.11简介简介.11下装下装.11安装安装.12使用使用 E EGGGG编写第一个程序编写第一个程序 .12建立工程建立工程.12编写代码编写代码.13运行程序运行程序.15进一步学习进一步学习.17EGGEGG 基本绘图基本绘图.17基本知识基本知识.17坐标系统坐标系统.17画笔当前位置画笔当

2、前位置.18初始化初始化.18直线直线.19曲线曲线.19正圆曲线正圆曲线.19椭圆曲线椭圆曲线.20字符串字符串.20贴图贴图.20EGGEGG 高级绘图高级绘图.21画笔颜色和宽度画笔颜色和宽度.21字体字体.22填充填充.22EGGEGG 动画功能动画功能.22下蛋下蛋.22画蛋画蛋.22动蛋动蛋.23其它其它.25EGGEGG 交互功能交互功能.26事件事件.26按键处理按键处理.26WaitForEvent()WaitForEvent()初探初探.26按不同键做不同事按不同键做不同事.27处理同时按下的键处理同时按下的键.28鼠标移动鼠标移动.28定时器定时器.29WaitFor()

3、WaitFor().29StartTimer()StartTimer() & & StopTimer()StopTimer().29备份、升级、发布我自己的备份、升级、发布我自己的 EGGEGG 程序程序.30备份备份.31升级升级.31发布发布.31本文档资料来自网址:本文档资料来自网址:1.1. 在在 VC6VC6 上编写、运行、调试上编写、运行、调试 C C 语言程序语言程序前言前言Turbo C 2.0 发布于 1989 年,对历史并不太长而发展却神速的 IT 业来说,确实是古董级的软件了。但它几乎是最后一个专门为 C 语言设计的开发环境,具备学习 C 语言的一切条件,

4、没有任何非 C 语言的东西干扰初学者,所以一直被各大高校的 C 语言课堂采用。 C+的发展使 C+的开发环境大行其道。因为 C+几乎完全兼容 C 语言,两者无论编译器还是编辑器、调试器都可以用同一套程序实现,而且 C+共享 C的库函数,很多软件还是用两者混合编程实现,所以基本所有的 C+环境都同时支持 C 语言。 美国微软公司出品的 Visual C+(以下简称 VC)是 Windows 平台上最流行的 C/C+集成开发环境。从 1993 年发行 1.0 版本开始,历经多年锤炼,于 2003年推出最新的 7.0 版本(Visual C+ .NET 2003)。本文将介绍如何在流传更广泛的 6.

5、0 版本下开发 C 语言程序。 编辑、编译与运行编辑、编译与运行VC 6 强大的 AppWizard 并不支持生成 C 语言工程,我们需要独辟蹊径。如下图所示,首先点击“新建”按钮建立一个空的文本文件。 然后,我们点击“保存按钮”或者按“ctrl+s”保存这个文件,扩展名一定要是“.c”,如下图所示: 现在,我们可以在文件中输入我们的源代码开始编写程序了,当程序编写完成之后,我们按“编译”按钮或“F7”开始编译它,不过在编译之前,VC 先会弹出对话框,询问是否建立一个缺省的项目工作区。VC 必须有项目才能编译,所以这里必须回答“Yes”上图就是我们在学习 C 语言时常常需要与之打交道的开发环境

6、了,下面我们就来简单的熟悉一下它: 编译:即编译当前文件 Build:编译项目中的所有文件,并把它们链接到一起 中止编译:在编译的时候,可以点击此按钮中止编译过程 运行:运行程序。如果程序未被 Build,它们先 Build 然后再运行 调试运行:用调试器运行程序,此时,你可以通过设置断点、单步执行等多种方式跟踪程序的运行状况。有关调试方面的更多的内容会在后面的部份详细介绍 设置或取消断点:可以在当前行设置一个或取消一个断点,这在后面介绍调试的部份详细介绍。 文件及函数浏览器:可以浏览整个项目中的所有函数、全局变量以及所有文件。双击文件名,可以在右边的代码编辑器中打开相应文件。双击函数名或全局

7、变量名,可以在右边的代码编辑器中打开此函数或全局变量所在的文件并定位到函数体内或全局变量声明的地方 代码编辑器:输入代码用 信息输出窗:系统用来输出一些信息。比如上面在执行编译时,系统就会输出编译的结果,一般是编译器在程序中发现的错误或者一些警告。如果编译器没有发现错误(error)及警告(warning),那么你会在最后一行看见“0 error(s), 0 warning(s)”的字样。注意:在写程序时应当认真而小心注意:在写程序时应当认真而小心的对待每一个的对待每一个 warningwarning,最好把它们都当做,最好把它们都当做 errorerror 对待。对待。 在编译完成之后,我们

8、就可以按“运行(ctrl+F5)”或者“调试运行(F5)”来运行我们的程序了。在以后的使用中,我们可以直接按“运行”或“调试运行”而不需要单独进行编译,因为当你按“运行”或“调试运行”的时候它会自动的检测程序是否需要重新编译,如果需要,则会弹出一个对话框询问你是否同意重新编译,你只需在此时点击“Yes”,它就会自动重新编译、连接程序后再运行,非常方便。 VCVC 6 6 调试技术调试技术用 VC6 进行程序的调试是非常方便的,我们可以在任一行设置一个断点,当程序执行到断点所在的行时就会暂时停住,此时,你可以单步执行程序(即一次只执行一条语句),并查看此时各种变量的值,下面我们就来看看如何使用

9、VC6 的调试功能。 设置断点设置断点我们先输入一小段程序,然后在程序中设置一个断点,如下图所示: 调试运行调试运行现在我们点击工具栏上的“调试运行按钮(F5)”,这时程序将自动编译、连接、运行,然后停在我们所设定的断点的行上。设置断点后,我们可以看见当前行的最左端有一个暗红色的大圆点,如下图所示: 上图就是我们这里将要详细介绍的调试界面: 继续运行:表示继续执行程序,直到碰见下一个断点时为止 重新运行:表示重新从头开始运行程序 停止调试:表示中止现在的调试界面,返回到代码编写界面 进入函数内:单步执行命令。如果下一条即将执行的语句是一条函数调用语句,那么就进入到函数体内 越过函数:单步执行命

10、令。如果下一条即将执行的语句是一条函数调用语句,它不会进入函数体内,而是直接执行整个函数,并停到函数返回后的第一条语句上 运行到光标所在的行:表示继续执行程序,直到运行到光标所在的行为止 快速查看变量:它可以允许程序员自定义想要监视的变量,并在“指定变量显示区”显示 代码所在的上下文:表明当前执行的语句所在的函数 当前变量显示区:与当前执行语句有关的变量的值 从图中可见,现在程序已经在我们当时设置的断点处停住了,最左端的黄色箭头指示着即将运行的下一条语句。这个时候我们可以看见“当前变量显示区”中有一个变量,名为“all”,值为“-858993460”,由于这条语句现在还没有执行,因此,这个值是

11、一个随机值,无实意。现在我们点击工具栏上的“进入函数内(F11)”的按钮,由于这条语句会调用函数“sum()”,因此它会进行到“sum()”函数体内去执行,如下图所示: 我们可以反复执行“单步执行命令”(即工具栏上的“进入函数内”、“越过函数”按钮)来观察程序的流程。 自定义监视变量自定义监视变量通过“Debug”菜单上的“快速查看变量”我们可以设定我们想要监视的变量,并在“指定变量显示区”中显示。现在我们点击“Debug”菜单上的“快速查看变量”命令(Debug|QuickWatch .),将弹出如下的对话框: 我们可以在最上面的输入框中输入我们想查看的变量的变量名或者表达式,然后我们可以点

12、击“Recalculate”按钮获到这个变量或表达式现在的值,这个值将在下面的显示区中显示,然后我们可以点击“Add Watch”按钮把这个变量或表达式加入到“指定变量显示区”中,如下图所示: 进一步学习进一步学习VC6 还可以直接调试汇编代码,查看 cpu 各寄存器的状态等,但不是很常用,这里就不在介绍了,感兴趣的朋友可以查看 VC6 的用户手册。 2.2. EggEgg 安装和使用安装和使用简介简介Egg 是由哈尔滨工业大学计算机科学与技术学院教师孙志岗开发的一个开放源代码软件,采用 GPL 协议。它的设计目标是开发一个极其简单、直观的Win32 平台下的图形动画函数库,C 语言的初学者可

13、以使用它开发动画、游戏等图形程序,让 C 语言的学习过程变得更有趣,更有成就感。有关 Egg 的详细介绍,可以访问 Egg 的主页: 下装下装最新的 Egg 发行包可以到下载。如果愿意尝试最新功能,可以用 CVS 和最新的代码同步。关于 CVS 的使用请参见如下两处: 安装安装Egg 的发行包是一个可直接运行的安装程序,直接运行并根据提示选择你需要的组件。如果安装过程有困扰,就所有选项都使用缺省设置,一路点击“下一步”即可。 使用使用 EggEgg 编写第一个程序编写第一个程序建立工程建立工程安装完毕后,运行 Visual C+ 6.0,从菜单依次点击 FileNew,然后在弹出的菜单中选择“

14、C 语言应用开发向导”,并输入项目名,如下图所示: 随后,点击 Ok,会弹出如下的一个对话框,这是 Egg 的设置界面: 它有如下的一些设置选项: 使用 Egg 平台:它表示我们会在程序中使用 Egg 所提供的函数等。如不选择,就建立一个普通的 C 语言工程。 静态库方式:使用这种方式,我们在程序中可以调用 Egg 所提供的函数,但不能看到 Egg 的源码。此种方式对程序员要求较低,适合于初学者使用。 源代码方式:使用这种方式,Egg 的源码就成为我们程序本身的一部份,我们不仅可以使用 Egg 所提供的函数,而且可以看到 Egg 的源码,甚至可以修改 Egg 源码而完成一些 Egg 本身未提供

15、的功能。此种方式对程序员有一定要求,适合于高级用户使用。 这里我们选择“静态库方式”,直接点击“Finish”按钮完成设置。这样,我们的第一个使用 Egg 的工程便建立起来了,接下来,我们将为其编写代码。 编写代码编写代码我们展开最左边的类视图,并双击“main()”函数,系统将在右边打开“main()”函数所在的文件,并定位到“main()”函数内,这样我们就可以开始编写代码了,如下图所示: 现在,在“main()”函数内键入如下的一段代码: EggStart(5, 5); /打开一个 5 厘米见方的 Egg 窗口DrawLine(5, -5); /从初始位置(左上角)开始, /向 X 轴正

16、方向偏移 5 厘米,Y 轴负方向偏移 5 厘米, /画一条直线。WaitForExit(); /等待用户关闭窗口 如下图所示: 运行程序运行程序编写完代码之后,我们就可以编译、运行这个程序,来看看我们这段代码所产生的最后的结果。要达到这个目的可以直接点击工具栏上的“!”按钮来完成,如下图所示: 随后,系统将弹出一个对话框询问你是否需要编译源程序,直接点击“OK”,系统会自动的编译并连接 Egg 的代码库,然后运行程序,下图就是运行结果: 进一步学习进一步学习Egg 提供了很多函数,你可以灵活的使用它们以绘制出更多更绚丽的图画,下面一些资源可能是你在学习使用 Egg 的过程中所需要的: 3.3.

17、 EggEgg 基本绘图基本绘图基本知识基本知识只要了解 Egg 的坐标系统,就可以马上开始图形编程之旅。 坐标系统坐标系统Egg 的坐标系统采用我们最熟悉的平面直角坐标系,左下角是坐标原点,X 坐标向右递增,Y 坐标向上递增,单位是厘米。如右图: 画笔当前位置画笔当前位置在 Egg 中有一个画笔,尽管我们看不到它,但它确确实实存在。画笔指向的位置的坐标就是画笔的当前位置,简称画笔位置。所有绘图操作都是从画笔位置开始落笔绘图,按照绘图要求移动画笔,并把最后提笔结束的位置作为新的画笔位置。 MovePen()可以移动画笔位置到新的绝对坐标。 void MovePen(double x, doub

18、le y);OffsetPen()按相对当前位置的位移移动画笔。 void OffsetPen(double dx, double dy);初始化初始化只要调用一个函数EggStart()就完成所有初始化 Egg 平台的工作,参数更简单到只有两个:绘图窗口的宽和高,单位厘米。 void EggStart(double fWidth, double fHeight);你不需要考虑 Egg 的结束问题。只要程序正常退出,Egg 占用的所有资源都会被自动释放。 直线直线用 DrawLine()从画笔当前位置,按照参数指定的位移画一条直线。例如下面代码将以当前位置为左上角,绘制一个边长为 1 厘米的正

19、方形,并连接其对角线。 /绘制正方形DrawLine(1, 0);DrawLine(0, -1);DrawLine(-1, 0);DrawLine(0, 1);/绘制对角线DrawLine(1, -1);OffsetPen(0, 1);DrawLine(-1, -1);曲线曲线正圆曲线正圆曲线绘制正圆和曲线都使用 DrawArc()。 void DrawArc(double r, double dStart, double dSweep);参数 r 是曲线所在圆的半径,单位厘米。dStart 是曲线开始点在圆周上的角度,dSweep 是曲线沿圆周按逆时针方向扫过的角度。如右图所示,其中粗黑曲线

20、是下面代码所绘: DrawArc(2, 45, 90);如 dSweep 使用负数,就是沿圆周按顺时针方向画曲线,例如下面代码会画一个向上凹的半圆: DrawArc(2, 0, -180);下面代码绘制一个完整的圆: DrawArc(2, 0, 360);它和下面代码等价: DrawArc(2, 0, -360);椭圆曲线椭圆曲线椭圆和椭圆曲线使用 DrawEllipticalArc(),原型如下: void DrawEllipticalArc(double rx, double ry, double dStart, double dSweep);参数 dStart 和 dSweep 的含义与

21、 DrawArc 完全相同。rx 是该椭圆在 x 轴的半径,ry 是在 Y 轴的半径。 字符串字符串在 Egg 里输出字符串非常简单,只需要一个简单的函数DrawString()。 void DrawString(char* pString);例如,要输出Hello World,使用如下代码: DrawString(Hello World);字符串的左上角位于当前的画笔位置,输出后画笔位置移动到字符串的右上角。 贴图贴图Egg 支持.bmp 文件的贴图,使用下面函数: void DrawBitmap(char* lpszFilename);参数是 bmp 文件名,例如要贴当前目录下的“beau

22、ty.bmp”文件,可以使用下面语句: DrawBitmap(beauty.bmp);位图的左上角位于画笔当前位置,贴图后,当前位置移动到位图的右上角。 4.4. EggEgg 高级绘图高级绘图利用基本绘图功能,可以绘画复杂的单线条图形,但如果想要图案更加绚丽多彩,就要使用高级绘图功能。 画笔颜色和宽度画笔颜色和宽度函数 SetPen()改变画笔的颜色和宽度,从此都用指定的颜色和宽度绘画各种图形、文字,直到下次调用相关函数为止。 void SetPen(unsigned long color, double fWidth);fWidth 是宽度,单位厘米。color 是颜色,有如右表的颜色可供

23、选择。 如果只想单独改变颜色或宽度,可以调用SetPenColor()和SetPenWidth()。 例如设置画笔为红色,且宽度是 0.1 厘米,使用如下语句: SetPen(RED, 0.1);名称颜色 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 透明色,用它绘图可以起到擦除效果 它等价于 SetPenColor(RED);SetPenW

24、idth(0.1);字体字体此功能未完成,/blush 填充填充此功能未完成,/blush 5.5. EggEgg 动画功能动画功能Egg 的一大特色是其对 egg 的支持(注意大小写的区别)。首字母大写的“Egg”,表示 Egg 平台;小写的“egg”,是 Egg 独有的一个概念,它是在Egg 中最小的动画单元,可以单独在每个 egg 上绘画,并随意移动每个 egg,达到动画效果。 下蛋下蛋有了蛋,才能对其煎炒烹炸,所以我们先学学怎么下蛋。 每次调用 LayEgg()都会生成一个新的 egg,并把这个 egg 的句柄返回给你。 HEGG LayEgg(void);此句柄的用处后面再介绍。eg

25、g 的大小与调用 EggStart()时指定的大小一致,并且覆盖整个盘子(盘子是 Egg 图形窗口的昵称),但它初始状态是透明的。 理论上可以下无数的蛋,但注意不要下太多的蛋,否则撑破你的内存。 每个蛋都是相对独立的,可以绘画、移动任何一个蛋,而不会影响其它的蛋。当两个蛋重合,后下的蛋会覆盖先下的蛋。使用 ChangeEggLayer()可以改变egg 的层次,调整互相之间的覆盖关系。 画蛋画蛋其实在使用基本绘图功能时,就已经画蛋了,只是因为 Egg 由浅入深的设计,使你感觉不到 egg 的存在。 执行完 EggStart()后,便已经偷偷建立了一个 egg,所有的绘图操作,都是在这个 egg

26、 上进行的。当 LayEgg()后,再执行绘图操作,就是在新的 egg 上绘图了。 每次调用 LayEgg()都是这样的效果。如果想回头在旧 egg 上绘图,怎么办?使用 SetActiveEgg()函数。 void SetActiveEgg(HEGG hEgg);把每次 LayEgg()的返回值(egg 的句柄)保存下来,当要控制某个 egg 时,就把此句柄作为参数给 SetActiveEgg()函数,那么这个 egg 就成为“活动蛋”,此后的各种操作都将加诸其上。LayEgg()刚刚下的蛋不需要经过SetActiveEgg()的过程,会自动成为活动蛋。 下面例子下了 5 个蛋,并在每个蛋上

27、画大小不同的一个半圆。 #include egg.h #define NUMBER_OF_EGG 5int main(void) HEGG hEggsNUMBER_OF_EGG; int i; EggStart(10,5); for (i=0; iNUMBER_OF_EGG; i+) hEggsi = LayEgg(); DrawArc(i+1, 180, 180); WaitForExit(); return 0;这里没有使用 SetActiveEgg(),也看不出下蛋有何好处。但在下面一节,你将见到 egg 的妙处。 动蛋动蛋最激动人心的动画开始了! 目前 Egg 还只支持简单的动画,就是

28、挪动活动 egg 到篮子内的任何位置,通过MoveEgg()和 OffsetEgg()实现。 void MoveEgg(double x, double y);void OffsetEgg(double dx, double dy);这里的(x,y)是 egg 左上角在盘子内的坐标,(dx,dy)是在盘子坐标系内的位移。需要特别注意注意的是,绘画操作所采用的坐标系是每个 egg 自己的独立坐标,而不是盘子坐标。也就是说,绘画时,不需要考虑 egg 在盘子内的位置,egg 自己的左下角永远是坐标原点。 下面例子在上面例子的基础上,让半圆动了起来。 #include egg.h #define N

29、UMBER_OF_EGG 5int main(void) HEGG hEggsNUMBER_OF_EGG; int i; EggStart(10,5); for (i=0; iNUMBER_OF_EGG; i+) hEggsi = LayEgg(); DrawArc(i+1, 180, 180); i = 0; while (WaitFor(100) SetActiveEgg(hEggsi); OffsetEgg(NUMBER_OF_EGG - i - 1) * 0.1, 0); if (i NUMBER_OF_EGG - 1) i+; else i = 0; return 0;不过这段程序的

30、动画效果并不好,曲线都是先后动的,并没有一起动。下面代码利用 Egg 1.02 版以后提供的 SetAutoUpdate()和 Update(),使动画看起来更美观。 #include egg.h #define NUMBER_OF_EGG 5int main(void) HEGG hEggsNUMBER_OF_EGG; int i; EggStart(10,5); SetAutoUpdate(0);SetAutoUpdate(0); for (i=0; iNUMBER_OF_EGG; i+) hEggsi = LayEgg(); DrawArc(i+1, 180, 180); Update(

31、);Update(); i = 0; while (WaitFor(100) SetActiveEgg(hEggsi); OffsetEgg(NUMBER_OF_EGG - i - 1) * 0.1, 0); if (i Batch Build.; 2.选中含有“Release”字样的项; 3.点“Rebuild All”; 4.编译结束后,到项目的 Release 目录下找执行文件,发布之。 8. egg 函数原型查询手册函数原型查询手册基本功能基本功能下列数据类型和函数实现了 Egg 最基本的功能。通过它们可以建立图形窗口(Egg 平台称 它为盘子) ,并能在其上绘制简单的图形和文字。 函

32、数函数void EggStart (double fWidth, double fHeight) 开始使用Egg void ShowConsoleWindow (int bShow) 显示或隐藏终端窗口 void MovePen (double x, double y) 移动画笔位置 void OffsetPen (double dx, double dy) 位移画笔位置 double GetPenXPos (void) 得到画笔的X坐标 double GetPenYPos (void) 得到画笔的Y坐标 void DrawLine (double dx, double dy) 画直线 voi

33、d DrawString (char *pString) 绘制字符串 double GetStringWidth (char *pString) 得到字符串宽度 void DrawArc (double r, double dStart, double dSweep) 画曲线 void DrawEllipticalArc (double rx, double ry, double dStart, double dSweep) 画椭圆曲线 void DrawBitmap (char *lpszFilename) 帖图 高级图形功能高级图形功能下列宏和函数实现了 Egg 的高级图形功能。通过它们不

34、仅可以绘制曲线和圆形,而且可 以改变颜色、线粗、字体和填充色,还可以张贴位图。 宏定义宏定义#define BLACK RGB(0 x00, 0 x00, 0 x00) 黑色 #define DARK_BLUE RGB(0 x00, 0 x00, 0 x80) 深蓝色 #define DARK_GREEN RGB(0 x00, 0 x80, 0 x00) 深绿色 #define DARK_CYAN RGB(0 x00, 0 x80, 0 x80) 深青色 #define DARK_RED RGB(0 x80, 0 x00, 0 x00) 深红色 #define DARK_MAGENTA RGB

35、(0 x80, 0 x00, 0 x80) 深紫色 #define DARK_YELLOW RGB(0 x80, 0 x80, 0 x00) 深黄色 #define LIGHT_GRAY RGB(0 xC0, 0 xC0, 0 xC0) 浅灰色 #define DARK_GRAY RGB(0 x80, 0 x80, 0 x80) 深灰色 #define BLUE RGB(0 x00, 0 x00, 0 xFF) 蓝色 #define GREEN RGB(0 x00, 0 xFF, 0 x00) 绿色 #define CYAN RGB(0 x00, 0 xFF, 0 xFF) 青色 #defin

36、e RED RGB(0 xFF, 0 x00, 0 x00) 红色 #define MAGENTA RGB(0 xFF, 0 x00, 0 xFF) 紫色 #define YELLOW RGB(0 xFF, 0 xFF, 0 x00) 黄色 #define WHITE RGB(0 xFF, 0 xFF, 0 xFF) 白色 #define TRANSPARENT_COLOR RGB(0 x00, 0 x00, 0 xC8) 透明色,产生透明效果 函数函数void SetPen (unsigned long color, double fWidth) 设置画笔颜色和宽度 void SetPenColor

温馨提示

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

评论

0/150

提交评论