简单图形绘制与动态效果

上传人:痛*** 文档编号:244255196 上传时间:2024-10-03 格式:PPT 页数:34 大小:279KB
返回 下载 相关 举报
简单图形绘制与动态效果_第1页
第1页 / 共34页
简单图形绘制与动态效果_第2页
第2页 / 共34页
简单图形绘制与动态效果_第3页
第3页 / 共34页
点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,面向对象程序设计课程设计,实验项目,二、简单,图形绘制与动态效果,通 知,每周课堂提问记入平时成绩。,第一阶段内容在第六周结束,第,7,周安排一次测验:,形式:笔试,内容:第三章至第七章。有关概念、程序设计。,本次布置的实验分两部分:必做和选做,建立程序“工程”的步骤,(,课本第二章,),要求按照下列步骤规范执行,启动,VC+,,,点击,File/New,菜单,Workspace:,建立工作区。取工作区名称,文件夹选择在,E,盘(为了有效地保存文档,不要使用默认文件夹),Project:,建立工程。取工程名称(注意选择在“当前工作区”),File:,建立源程序文件。取文件名。输入源程序。,编译、连接、运行。,(了解程序文件存放的物理位置),使用,MSDN,查找,API,函数的使用方法:,Help/Search:“,活动子集”选择“,Platform SDK”;“,要查找的单词”输入相关,API,函数名,在“选择主题”中查找并双击该函数名,即可得到关于函数的说明、使用示例。,关于在工程中添加文件、在工作区中添加工程,请,查阅课本,P49,,重点注意,:,关于工作区面板“,FileView,”,中树状组织与磁盘物理文件的关系,关于工作区中工程与工程文件的编辑,工具栏的设置,练习一 作图,对例,4-1,作如下修改,获得不同效果:,改变图形填充色:三种图形使用不同颜色;,改变图形外框线型;,在圆角矩形中画两条对角线;(参考例,4-3,),在椭圆中画出长轴和短轴(轴长自定),试在用户区中加画一个三角形(自己设计坐标,使用,Polyline,或,Polygon,),思考:把画笔画刷语句注释后,是否可画图?,练习二:窗口刷新消息处理与用户区颜色变化,在课本程序,3-1,中的窗口函数,WndProc,增加语句,对,windows,发送过来的窗口刷新消息,WM_PAINT,进行处理,并用不同颜色刷新用户区。,认真阅读下列有关内容:,窗口变化后的刷新请求与,刷新过程:,消息处理过程,:(,windows,操作系统与窗口函数),画图步骤:(见后页),图形刷新的概念,画图的基本方法,图形刷新的概念、画图的基本方法:,图形刷新,是绘图过程中必须考虑的重要问题,刷新请求,对刷新请求的响应,刷新方法,包括,(1),刷新请求,应用程序在窗口中,绘制了一个椭圆,,颜色列表框覆盖了,椭圆的一部分,关闭颜色选框,,应用程序需要恢,复被覆盖部分的颜色和形状,窗口大小的调整,窗口移动,被覆盖后的恢复,(2),系统对刷新请求的响应,当用户区的内容需要刷新时,系统向应用程序消息队列发送,WM_PAINT,消息,系统在应用程序的消息队列中加入该消息,以通知窗口函数执行刷新处理,三种,刷新,窗口移动后的刷新,被覆盖区域的刷新,对象穿越后的刷新,(,系统自动完成,),用户区移动或显示,用户窗口大小改变,程序通过滚动条滚动窗口,窗口被另一个窗口覆盖的,恢复如下拉式菜单关闭等,光标穿过用户区,图标拖过用户区,窗口被另一个窗口覆盖的区域称为,无效区域,。,Windows,系统为每个窗口建立了一个,PAINTSTRUCT,结构,,,该结构中包含了包围,无效区域,的一个最小矩形的结构,RECT,,,应用程序可以根据这个无效矩形执行刷新操作。,Typedef,struct,tagPAINTSTRUCT,HDC,hdc,;/,设备描述表句柄,BOOL,fErase,;/,一般取真值,表示擦除无效矩形的背景,RECT,rcPaint,;/,无效矩形标识,BOOL,fRestore,;/,系统保留,BOOL,fIncUpdate,;/,系统保留,BYTE rgbReserved16,;,/,系统保留,PAINTSTRUCT;,rcPaint,为标准的,RECT,数据结构,其作用是标识无效矩形,它包含了无效矩形的左上角和右下角的坐标,常用的,Windows,应用程序刷新窗口的方法,保存副本。刷新时将副本拷贝到相应的窗口中,记录事件。刷新时重新执行这个曾经发生的事件,重新绘制。将图形绘制处理程序放在消息,WM_PAINT,响应模块中,刷新时重绘图形,(3),有效的刷新方法,消息处理过程,Cpu,memory,Keyboard,mouse CRT,Windows,控制所有资源,运行中的,windows,程序,窗口程序,窗口操作,窗口,message+,窗口标识,获取本窗口的消息,处理结果,显示结果,画图步骤,准备画轮廓的画笔,准备填充的画刷,Windows,中每个对象都有“句柄”,画笔、画刷也是对象,也要通过“句柄”来使用,定义画笔、画刷的句柄变量,:,HPEN,hPen,;,HBRUSH,hBrush,;,但,hPen,、,hBrush,还只是随机数,指定某种画笔、画刷给,hPen,hBrush,:,hPen,=,CreatePen(PS_SOLID,2,RGB,(red,green,blue),);,hBrush,=,CreateSolidBrush,(,RGB(red,0,0),);,线型,线宽,线色,画刷颜色,画图的有关概念,谁,负责画图?,Windows,直接画?,Windows,通过一套称为“设备无关”的图形接口程序(,GDI,函数)进行画图,程序员的责任,把有关要求:笔、刷、图形、参数提供给,GDI,设备描述表,记录各种作图要求与参数的数据结构,Windows,在任一时刻都能为,每个窗口,提供用于作图的“,设备描述表,”,作图前一般都要先,获取当前窗口的,“,设备描述表”,通过函数把作图所需的设备(画笔、画刷、图形、参数)“写入”设备描述表,也就是提供给,GDI,调用,GDI,函数由,GDI,进行作图。,设备描述表的获取,设备描述表是一个对象,也要使用“句柄”,HDC,hDC,;/,定义一个句柄,为,hDC,赋,值:,hDC,=,GetDC(hwnd,);,/,可用于各种消息处理时画图,或,hDC,=,BeginPaint(hwnd,&ps,);,/,仅用于,WM_PAINT,这两种方法各有不同的,适用场合,处理,非,WM_PAINT,消息时绘图,处理,WM_PAINT,消息时绘图,画图的程序写在哪里?,主要在对,WM,PAINT,消息的处理中进行作图,图形刷新,画图程序设计的基本方法(思路),画笔、画刷的定义、选入,图形参数的计算,调用作图函数,调用,GDI,绘图函数画图,画一个圆,画一个矩形,画一个饼,把整个用户区刷新:,Rectangle(hdc,PtStr.rcPaint.left,PtStr.rcPaint.top,PtStr.rcPaint.right,PtStr.rcPaint.bottom,);,RECT,类型,:定义了一个矩形区域及其左上角和右下角的坐标,匈牙利表示法,变量名以一个或多个小写字母开始,这些小写字母表示变量的数据类型。,变量的后续字符描述变量的作用,如:,szCmdLine,,,hInstance,,,hPen,变量名既描述了变量的作用,也描述了变量的数据类型,避免产生数据类型不匹配,及早发现错误,程序设计,在,窗口函数,WndProc,中增加定义变量:,HDC,hdc,;,/,设备描述表句柄,PAINTSTRUCT,PtStr,;,/,无效矩形变量,HBRUSH,hbrush,;,/,画刷句柄,static,int,r=0,g=0,b=0;,/,三原色,程序设计,在处理,WM_PAINT,处写入下列程序,然后编译、连接、运行。,case WM_PAINT:,hdc,=,BeginPaint(hwnd,&PtStr,);,hbrush,=,CreateHatchBrush(HS_CROSS,RGB(r,g,b,);,SelectObject(hdc,hbrush,);,Rectangle(hdc,PtStr.rcPaint.left,PtStr.rcPaint.top,PtStr.rcPaint.right,PtStr.rcPaint.bottom,);,r=(r+10)%255;g=(g+10)%255;b=(b+10)%255;,EndPaint(hwnd,&PtStr,);,return 0;,思考:窗口变化(放大、还原、移动、大小)有何不同?为什么?,改进效果:在窗口大小变化时也能对整个用户区进行刷新,增加对,WM_SIZE,消息的处理,case WM_SIZE:,InvalidateRect(hwnd,NULL,TRUE,);,return 0;,InvalidateRect,函数的作用:使用户区失效,让,windows,产生一条,WM_PAINT,消息:,InvalidateRect(hwnd,NULL,FALSE,/TRUE),NULL:,刷新整个用户区;,TRUE,:,清除用户区当前图像;,练习三:移动的图形,以,课本程序,4-1,为基础,增加刷新与程序暂停函数,使图形动起来。,图形能动的原因:,刷新后在另一个位置画图,增加一个图形位移变量,x,,,每次画图后增量,x+=10;,使图形的坐标进行位移,如:,RoundRect(hDC,50+x,120,100+x,200,15,15);,强制刷新:,InvalidateRect(hwnd,NULL,TRUE),;,控制刷新频率:,Sleep(100);,/,强制程序暂停,0.1,秒,修改对,WM_PAINT,消息的处理,练习三:移动的图形,窗口函数开头的变量定义,增加:,static,int,x=0;/,思考:为什么定义,static?,case WM_PAINT:,hdc,=,BeginPaint(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,为限?加大一些行吗?,练习四:在鼠标单击时图形变化,单击鼠标产生鼠标消息,WM_LBUTTONDOWN,WM_RBUTTONDOWN,。,在这些消息到达窗口函数时,强制刷新用户区,重新画图。,区分左右键画不同的图形:设两个标志变量,static,int,lbutt,=1,rbutt,=0;,在处理鼠标消息时更新这两个变量,处理,WM_PAINT,消息时要分别根据,lbutt,和,rbutt,的,状态选择画不同的图形。,程序设计,窗口函数中增加变量定义,static,int,lbutt,=1,rbutt=0;,处理鼠标消息,case WM_LBUTTONDOWN:,lbutt,=1;rbutt=0;,InvalidateRect(hWnd,NULL,1);,return 0;,case WM_RBUTTONDOWN:,lbutt,=0;rbutt=1;,InvalidateRect(hWnd,NULL,1);,return 0;,程序设计,选择画不同图形,if(,lbutt,=1)/,按下左键画,图形,else/,按下右键画,图形,实验任务五:以习题,4-6,为基础,分析、理解“习题”书的程序,4-6,,要求,对,4,6,进行各方面的“探索”,,产生不同的动态效果:,改变正弦波的幅度,小圆球的运动轨迹变成筒状,小圆球上下运动,小圆球能重复运动或往复运动,按照实验报告要求完成任务,在网络课堂提交。,习题,4-6,的分析,正弦曲线的表现,连续曲线由离散点组成,点的密度影响曲线质量。,正弦曲线离散点的计算:,POINT lpSin100;/,存储正弦曲线点的坐标,.,for(int,j=0;j100;j+)/,生成正弦曲线点的坐标,.,lpSinj.x,=(long)(j*2*Pi/100*60);,lpSinj.y,=(,long)(dfRange,*sin(j*2*Pi/100);
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


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

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


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