简单图形绘制与动态效果

上传人:仙*** 文档编号:182412620 上传时间:2023-01-23 格式:PPT 页数:34 大小:206.50KB
收藏 版权申诉 举报 下载
简单图形绘制与动态效果_第1页
第1页 / 共34页
简单图形绘制与动态效果_第2页
第2页 / 共34页
简单图形绘制与动态效果_第3页
第3页 / 共34页
资源描述:

《简单图形绘制与动态效果》由会员分享,可在线阅读,更多相关《简单图形绘制与动态效果(34页珍藏版)》请在装配图网上搜索。

1、面向对象程序设计课程设计面向对象程序设计课程设计实验项目实验项目二、简单二、简单图形绘制与动态效果图形绘制与动态效果通通 知知n每周课堂提问记入平时成绩。每周课堂提问记入平时成绩。n第一阶段内容在第六周结束第一阶段内容在第六周结束n第第7周安排一次测验:周安排一次测验:n形式:笔试形式:笔试n内容:第三章至第七章。有关概念、程序设计。内容:第三章至第七章。有关概念、程序设计。n本次布置的实验分两部分:必做和选做本次布置的实验分两部分:必做和选做建立程序建立程序“工程工程”的步骤的步骤(课本第二章课本第二章)n要求按照下列步骤规范执行要求按照下列步骤规范执行n启动启动VC+,点击,点击File/

2、New菜单菜单nWorkspace:建立工作区。取工作区名称,文件夹选择在建立工作区。取工作区名称,文件夹选择在E盘(为了有效地保存文档,不要使用默认文件夹)盘(为了有效地保存文档,不要使用默认文件夹)nProject:建立工程。取工程名称(注意选择在建立工程。取工程名称(注意选择在“当前工作当前工作区区”)nFile:建立源程序文件。取文件名。输入源程序。建立源程序文件。取文件名。输入源程序。n编译、连接、运行。编译、连接、运行。(了解程序文件存放的物理位置)(了解程序文件存放的物理位置)n使用使用MSDN查找查找API函数的使用方法:函数的使用方法:nHelp/Search:“活动子集活动

3、子集”选择选择“Platform SDK”;“要查找的单要查找的单词词”输入相关输入相关API函数名,在函数名,在“选择主题选择主题”中查找并双击该函数名,中查找并双击该函数名,即可得到关于函数的说明、使用示例。即可得到关于函数的说明、使用示例。关于在工程中添加文件、在工关于在工程中添加文件、在工作区中添加工程作区中添加工程n请查阅课本请查阅课本P49,重点注意,重点注意:n关于工作区面板关于工作区面板“FileView”中树状组织与磁盘中树状组织与磁盘物理文件的关系物理文件的关系n关于工作区中工程与工程文件的编辑关于工作区中工程与工程文件的编辑n工具栏的设置工具栏的设置练习一练习一 作图作图

4、n对例对例4-1作如下修改,获得不同效果:作如下修改,获得不同效果:n改变图形填充色:三种图形使用不同颜色;改变图形填充色:三种图形使用不同颜色;n改变图形外框线型;改变图形外框线型;n在圆角矩形中画两条对角线;(参考例在圆角矩形中画两条对角线;(参考例4-3)n在椭圆中画出长轴和短轴(轴长自定)在椭圆中画出长轴和短轴(轴长自定)n试在用户区中加画一个三角形(自己设计坐标,试在用户区中加画一个三角形(自己设计坐标,使用使用Polyline或或Polygon)n思考:把画笔画刷语句注释后,是否可画图?思考:把画笔画刷语句注释后,是否可画图?练习二:窗口刷新消息处理与用户区颜色变化练习二:窗口刷新

5、消息处理与用户区颜色变化n在课本程序在课本程序3-1中的窗口函数中的窗口函数WndProc增加语句,增加语句,对对windows发送过来的窗口刷新消息发送过来的窗口刷新消息WM_PAINT进行处理,并用不同颜色刷新用户区。进行处理,并用不同颜色刷新用户区。n认真阅读下列有关内容:认真阅读下列有关内容:n窗口变化后的刷新请求与窗口变化后的刷新请求与刷新过程:刷新过程:n消息处理过程消息处理过程:(:(windows操作系统与窗口函数)操作系统与窗口函数)n画图步骤:(见后页)画图步骤:(见后页)n图形刷新的概念图形刷新的概念n画图的基本方法画图的基本方法图形刷新的概念、画图的基本方法:图形刷新的

6、概念、画图的基本方法:图形刷新图形刷新是绘图过程中必须考虑的重要问题是绘图过程中必须考虑的重要问题刷新请求刷新请求对刷新请求的响应对刷新请求的响应刷新方法刷新方法包括(1)刷新请求刷新请求 应用程序在窗口中应用程序在窗口中绘制了一个椭圆,绘制了一个椭圆,颜色列表框覆盖了颜色列表框覆盖了椭圆的一部分椭圆的一部分关闭颜色选框,关闭颜色选框,应用程序需要应用程序需要恢恢复被覆盖部分复被覆盖部分的颜色和形状的颜色和形状窗口大小的调整窗口大小的调整窗口移动窗口移动被覆盖后的恢复被覆盖后的恢复(2)系统对刷新请求的响应系统对刷新请求的响应 当用户区的内容需要刷新时,系统向应用程序消当用户区的内容需要刷新时

7、,系统向应用程序消息队列发送息队列发送WM_PAINT消息,系统在应用程序的消消息,系统在应用程序的消息队列中加入该消息,以通知窗口函数执行刷新处理息队列中加入该消息,以通知窗口函数执行刷新处理三种三种刷新刷新窗口移动后的刷新窗口移动后的刷新被覆盖区域的刷新被覆盖区域的刷新对象穿越后的刷新对象穿越后的刷新(系统自动完成)用户区移动或显示用户区移动或显示用户窗口大小改变用户窗口大小改变程序通过滚动条滚动窗口程序通过滚动条滚动窗口窗口被另一个窗口覆盖的窗口被另一个窗口覆盖的恢复如下拉式菜单关闭等恢复如下拉式菜单关闭等光标穿过用户区光标穿过用户区图标拖过用户区图标拖过用户区窗口被另一个窗口覆盖的区域

8、称为窗口被另一个窗口覆盖的区域称为无效区域无效区域。Windows系统为每个窗口建立了一个系统为每个窗口建立了一个PAINTSTRUCT结构结构,该该结构中包含了包围结构中包含了包围无效区域无效区域的一个最小矩形的结构的一个最小矩形的结构RECT,应用应用程序可以根据这个无效矩形执行刷新操作。程序可以根据这个无效矩形执行刷新操作。Typedef struct tagPAINTSTRUCTTypedef struct tagPAINTSTRUCT HDC hdc;HDC hdc;/设备描述表句柄设备描述表句柄 BOOL fErase;BOOL fErase;/一般取真值,表示擦除无效矩形的一般取

9、真值,表示擦除无效矩形的背景背景 RECT rcPaint;RECT rcPaint;/无效矩形标识无效矩形标识 BOOL fRestore;BOOL fRestore;/系统保留系统保留 BOOL fIncUpdate;BOOL fIncUpdate;/系统保留系统保留 BYTE rgbReserved16BYTE rgbReserved16;/系统保留系统保留 PAINTSTRUCT;PAINTSTRUCT;rcPaint 为标准的为标准的RECT数据结构,数据结构,其作用是标识无效矩形,它包含了其作用是标识无效矩形,它包含了无效矩形的左上角和右下角的坐标无效矩形的左上角和右下角的坐标常用

10、的常用的Windows应用程序刷新窗应用程序刷新窗口的方法口的方法保存副本。刷保存副本。刷新时将副本拷新时将副本拷贝到相应的窗贝到相应的窗口中口中记录事件。刷新记录事件。刷新时重新执行这个时重新执行这个曾经发生的事件曾经发生的事件重新绘制。将图形重新绘制。将图形绘制处理程序放在绘制处理程序放在消息消息WM_PAINT响应模块中,刷新响应模块中,刷新时重绘图形时重绘图形(3)有效的刷新方法有效的刷新方法消息处理过程消息处理过程Cpu memory Keyboardmouse CRTWindows控制所有资源控制所有资源运行中的运行中的windows程序程序窗口程序窗口程序窗口操作窗口操作窗口窗口

11、message+窗口标识窗口标识获取本窗获取本窗口的消息口的消息处理结果处理结果显示结果显示结果画图步骤画图步骤n准备画轮廓的画笔准备画轮廓的画笔n准备填充的画刷准备填充的画刷nWindows中每个对象都有中每个对象都有“句柄句柄”,画笔、画刷也,画笔、画刷也是对象,也要通过是对象,也要通过“句柄句柄”来使用来使用n定义画笔、画刷的句柄变量:定义画笔、画刷的句柄变量:HPEN hPen;HBRUSH hBrush;但但hPen、hBrush还只是随机数还只是随机数n指定某种画笔、画刷给指定某种画笔、画刷给hPen,hBrush:hPen=CreatePen(PS_SOLID,2,RGB(red

12、,green,blue);hBrush=CreateSolidBrush(RGB(red,0,0);线型线型线宽线宽线色线色画刷画刷颜色颜色画图的有关概念画图的有关概念n谁负责画图?谁负责画图?nWindows直接画?直接画?nWindows通过一套称为通过一套称为“设备无关设备无关”的图形的图形接口程序(接口程序(GDI函数)进行画图函数)进行画图n程序员的责任程序员的责任n把有关要求:笔、刷、图形、参数提供给把有关要求:笔、刷、图形、参数提供给GDI设备描述表设备描述表n记录各种作图要求与参数的数据结构记录各种作图要求与参数的数据结构nWindows在任一时刻都能为在任一时刻都能为每个窗口

13、每个窗口提供用于提供用于作图的作图的“设备描述表设备描述表”n作图前一般都要先作图前一般都要先获取当前窗口的获取当前窗口的“设备描述表设备描述表”n通过函数把作图所需的设备(画笔、画刷、图形、通过函数把作图所需的设备(画笔、画刷、图形、参数)参数)“写入写入”设备描述表,也就是提供给设备描述表,也就是提供给GDIn调用调用GDI函数由函数由GDI进行作图。进行作图。设备描述表的获取设备描述表的获取n设备描述表是一个对象,也要使用设备描述表是一个对象,也要使用“句柄句柄”HDChDC;/定义一个句柄定义一个句柄n为为hDC赋值:赋值:hDC=GetDC(hwnd);/可用于各种消息处理时画图可用

14、于各种消息处理时画图或或hDC=BeginPaint(hwnd,&ps);/仅用于仅用于WM_PAINT这两种方法各有不同的这两种方法各有不同的适用场合适用场合处理处理非非WM_PAINTWM_PAINT消息时绘图消息时绘图处理处理WM_PAINTWM_PAINT消息时绘图消息时绘图画图的程序写在哪里?画图的程序写在哪里?n主要在对主要在对WMPAINT消息的处理中进行作图消息的处理中进行作图n图形刷新图形刷新n画图程序设计的基本方法(思路)画图程序设计的基本方法(思路)n画笔、画刷的定义、选入画笔、画刷的定义、选入n图形参数的计算图形参数的计算n调用作图函数调用作图函数调用调用GDI绘图函数

15、画图绘图函数画图n画一个圆画一个圆n画一个矩形画一个矩形n画一个饼画一个饼n把整个用户区刷新:把整个用户区刷新:,);RECT类型类型:定义了:定义了一个矩形区域及其左一个矩形区域及其左上角和右下角的坐标上角和右下角的坐标匈牙利表示法匈牙利表示法n变量名以一个或多个小写字母开始,这些小变量名以一个或多个小写字母开始,这些小写字母表示变量的数据类型。写字母表示变量的数据类型。n变量的后续字符描述变量的作用变量的后续字符描述变量的作用如:如:szCmdLine,hInstance,hPenn变量名既描述了变量的作用,也描述了变量变量名既描述了变量的作用,也描述了变量的数据类型的数据类型n避免产生数

16、据类型不匹配避免产生数据类型不匹配n及早发现错误及早发现错误程序设计程序设计n在窗口函数在窗口函数WndProc中增加定义变量:中增加定义变量:nHDC hdc;/设备描述表句柄设备描述表句柄nPAINTSTRUCT PtStr;/无效矩形变量无效矩形变量nHBRUSH hbrush;/画刷句柄画刷句柄 nstatic int r=0,g=0,b=0;/三原色三原色程序设计程序设计n在处理在处理WM_PAINT处写入下列程序,然后编译、连接、运行。处写入下列程序,然后编译、连接、运行。case WM_PAINT:hdc=BeginPaint(hwnd,&PtStr);hbrush=Create

17、HatchBrush(HS_CROSS,RGB(r,g,b);SelectObject(hdc,hbrush);,);r=(r+10)%255;g=(g+10)%255;b=(b+10)%255;EndPaint(hwnd,&PtStr);return 0;思考:窗口变化(放大、还原、移动、大小)有何不同?为什么?思考:窗口变化(放大、还原、移动、大小)有何不同?为什么?改进效果:在窗口大小变化时也能对整个改进效果:在窗口大小变化时也能对整个用户区进行刷新用户区进行刷新n增加对增加对WM_SIZE消息的处理消息的处理case WM_SIZE:InvalidateRect(hwnd,NULL,T

18、RUE);return 0;nInvalidateRect函数的作用:使用户区失效,函数的作用:使用户区失效,让让windows产生一条产生一条WM_PAINT消息:消息:InvalidateRect(hwnd,NULL,FALSE/TRUE)NULL:刷新整个用户区;TRUE:清除用户区当前图像;练习三练习三:移动的图形:移动的图形n以课本程序以课本程序4-1为基础,增加刷新与程序暂停函数,为基础,增加刷新与程序暂停函数,使图形动起来。使图形动起来。n图形能动的原因:图形能动的原因:n刷新后在另一个位置画图刷新后在另一个位置画图增加一个图形位移变量增加一个图形位移变量x,每次画图后增量,每次

19、画图后增量x+=10;使图形的坐标进行位移,如:使图形的坐标进行位移,如:RoundRect(hDC,50+x,120,100+x,200,15,15);n强制刷新:强制刷新:InvalidateRect(hwnd,NULL,TRUE);n控制刷新频率:控制刷新频率:Sleep(100);/强制程序暂停秒强制程序暂停秒n修改对修改对WM_PAINT消息的处理消息的处理练习三:移动的图形练习三:移动的图形窗口函数开头的变量定义,增加:窗口函数开头的变量定义,增加:static int x=0;/思考:为什么定义思考:为什么定义static?case WM_PAINT:hdc=BeginPaint

20、(hWnd,&PtStr);RoundRect(hDC,50+x,120,100+x,200,15,15);EndPaint(hWnd,&PtStr);Sleep(100);x+=10;if(x300)InvalidateRect(hWnd,NULL,1);return 0;/思考:为什么设思考:为什么设300为限?加大一些行吗?为限?加大一些行吗?练习四:在鼠标单击时图形变化练习四:在鼠标单击时图形变化n单击鼠标产生鼠标消息单击鼠标产生鼠标消息WM_LBUTTONDOWN,WM_RBUTTONDOWN。在这些消息到达窗口函数时,强制刷新用户区,重新在这些消息到达窗口函数时,强制刷新用户区,重

21、新画图。画图。n区分左右键画不同的图形:设两个标志变量区分左右键画不同的图形:设两个标志变量static int lbutt=1,rbutt=0;在处理鼠标消息时更新这两个变量在处理鼠标消息时更新这两个变量n处理处理WM_PAINT消息时要分别根据消息时要分别根据lbutt和和rbutt的状态选择画不同的图形。的状态选择画不同的图形。程序设计程序设计n窗口函数中增加变量定义窗口函数中增加变量定义static int lbutt=1,rbutt=0;n处理鼠标消息处理鼠标消息case WM_LBUTTONDOWN:lbutt=1;rbutt=0;InvalidateRect(hWnd,NULL,

22、1);return 0;case WM_RBUTTONDOWN:lbutt=0;rbutt=1;InvalidateRect(hWnd,NULL,1);return 0;程序设计程序设计n选择画不同图形选择画不同图形if(lbutt=1)/按下左键画按下左键画图形图形else/按下右键画按下右键画图形图形实验任务五:以习题实验任务五:以习题4-6为基础为基础n分析、理解分析、理解“习题习题”书的程序书的程序4-6,要求对,要求对46进行各方面的进行各方面的“探索探索”,产生不同的动态效果:,产生不同的动态效果:n改变正弦波的幅度改变正弦波的幅度n小圆球的运动轨迹变成筒状小圆球的运动轨迹变成筒状

23、n小圆球上下运动小圆球上下运动n小圆球能重复运动或往复运动小圆球能重复运动或往复运动n按照实验报告要求完成任务,在网络课堂提交。按照实验报告要求完成任务,在网络课堂提交。习题习题4-6的分析的分析n正弦曲线的表现正弦曲线的表现n连续曲线由离散点组成,点的密度影响曲线质量。连续曲线由离散点组成,点的密度影响曲线质量。正弦曲线离散点的计算:正弦曲线离散点的计算:POINT lpSin100;/存储正弦曲线点的坐标存储正弦曲线点的坐标.for(int j=0;j100;j+)/生成正弦曲线点的坐标生成正弦曲线点的坐标.lpSinj.x=(long)(j*2*Pi/100*60);lpSinj.y=(

24、long)(dfRange*sin(j*2*Pi/100);思考:默认的坐标原点在哪里?在用户区左上角。思考:默认的坐标原点在哪里?在用户区左上角。一个周期的横坐标分为一个周期的横坐标分为100100等份等份纵坐标(纵坐标(Y Y)的值有正负,怎么办?)的值有正负,怎么办?对对“负值坐标负值坐标”的处理的处理nY轴方向加一个振幅轴方向加一个振幅POINT lpSin100;/存储正弦曲线点的坐标存储正弦曲线点的坐标.for(int j=0;j100;j+)/生成正弦曲线点的坐标生成正弦曲线点的坐标.lpSinj.x=(long)(j*2*Pi/100*60);lpSinj.y=(long)(d

25、fRange*sin(j*2*Pi/100)+dfRange;n为了看清圆,在为了看清圆,在X、Y方向再加圆半径方向再加圆半径lpSinj.x=(long)(j*2*Pi/100*60)+0.2*dfRange;lpSinj.y =(long)(dfRange*sin(j*2*Pi/100)+1.6*dfRange;坐标计算放在消坐标计算放在消息循环之前息循环之前圆半径的变化:圆半径的变化:振幅的倍线性增长振幅的倍线性增长n在四分之一周期内变化:每个周期在四分之一周期内变化:每个周期100个点,四个点,四分之一周期是分之一周期是25个点。个点。n在在25个点内圆半径从个点内圆半径从0.6dfR

26、ange:使用差分使用差分方法计算方法计算.lRadious=(long)(dfRange*0.2+i%25*dfRange*0.4/25);作用作用?25?25个点一循环个点一循环可否改变可否改变i i变量的全局性变量的全局性图像暂留与刷新图像暂留与刷新nSleep()程序暂停程序暂停nInvalidateRect(hWnd,NULL,1)刷新用户区中的指定区域刷新用户区中的指定区域:n第二参数为空第二参数为空:刷新整个用户区刷新整个用户区n第三参数的作用第三参数的作用?实验任务六:以习题实验任务六:以习题4-7为基础为基础n以以47为基础,产生霓虹灯效果为基础,产生霓虹灯效果n提示:每隔一

27、定时间改变每个图形的画刷,重新画图。提示:每隔一定时间改变每个图形的画刷,重新画图。n方法一:定义方法一:定义“画刷画刷”数组,有规律地在不同时刻取不同数组,有规律地在不同时刻取不同的画刷画图,由此产生的画刷画图,由此产生“图形流动图形流动”的感觉。的感觉。n方法二:认真阅读习题方法二:认真阅读习题4-9,学习用,学习用4-9的方法实现霓虹灯的方法实现霓虹灯效果。效果。n按照实验报告要求完成任务,在网络课堂提交。按照实验报告要求完成任务,在网络课堂提交。拓展设计拓展设计:选作选作n主题设计:运用图形、文字,展现一个主题效果。例如:主题设计:运用图形、文字,展现一个主题效果。例如:n静静的小河静静的小河n池塘夜降七色雨池塘夜降七色雨n春天的公园春天的公园n城市楼群城市楼群n其它主题其它主题n完成时间:第十五周前完成时间:第十五周前n提交:网络课堂提交:网络课堂“自选设计自选设计”作业作业1(作为(作为课程设计课程设计综评加分)综评加分)n参考设计:网络课堂参考设计:网络课堂“设计范例设计范例”

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!