已阅读5页,还剩33页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,VC+的图形处理,Windows图形设备接口窗口内绘图使用绘图属性与绘图有关的两个消息,2,1Windows图形设备接口(GDI),3,1.1GDI的基本概念,GDI是与设备无关的图形设备接口就是操作系统屏蔽了硬件设备的差异用户编程时无需考虑特殊的硬件设置提供了函数实现在输出设备上显示图形或文字;提供了绘图对象:设备描述表画刷-画笔字体位图调色板,4,设备描述表设备(显示器、打印机等)环境的属性的集合应用程序通过设备描述表的句柄,建立与设备的联系,实现图形操作。MFC设备描述表类MFC封装了Windows提供的不同类型的设备描述表于不同的DC类基类CDC:定义了设备描述表对象,并且提供在显示器、打印机或Windows用户区上绘图的方法,封装了GDI函数CPaintDC:CDC的子类,仅在WM_PAINT消息需要响应时才起作用CClientDC:CDC的子类,与CClientDC对象相关的设备环境是窗口的客户区CWindowDC:CDC的子类,与该对象相关的设备环境是整个窗口,包括客户区和非客户区,还可访问整个屏幕,1.2设备描述表,5,2窗口内绘图,画直线函数BOOLCDC:LineTo(intX,intY);从当前位置向指定坐标点画直线的函数X和Y为线段的终点坐标CPointCDC:MoveTo(intX,intY);设置画笔当前位置X、Y为新位置的坐标,6,例:画直线pDC-MoveTo(10,10);pDC-LineTo(100,100);,画折线函数BOOLPolyline(LPPOINTlpPoints,intnCount)lpPoints是指向折线顶点数组的指针nCount指定折线顶点数组中顶点数目,7,绘制弧线BOOLArc(intX1,intY1,intX2,intY2,intX3,intY3,intX4,intY4)X1,Y1为边框矩形左上角的逻辑坐标X2,Y2边框矩形右下角的逻辑坐标X3,Y3弧的起点坐标X4,Y4弧的终点坐标,8,绘制弧线BOOLArc(LPCRECTlpRect,POINTptStart,POINTptEnd)lpRect为边框矩形,可以是LPCRECT或CRect对象ptStart弧的起点ptEnd弧的终点,9,BOOLPie(intX1,intY1,intX2,intY2,intX3,intY3,intX4,intY4)BOOLPie(LPCRECTlpRect,POINTptStart,POINTptEnd),绘制饼图,并用当前画刷填充,10,BOOLRectangle(intX1,intY1,intX2,intY2)BOOLRectangle(LPCRECTlpRect),(X1,Y1)和(X2,Y2)分别为矩形的左上角和右下角的逻辑坐标lpRect为一个矩形结构的指针,绘制矩形,并用当前画刷填充,11,BOOLEllipse(intX1,intY1,intX2,intY2)BOOLEllipse(LPCRECTlpRect),BOOLPolygon(LPPOINTlpPoints,intnCount),包含各点坐标的POINT数组的地址,多边形点的个数,绘制椭圆,并用当前画刷填充,绘制多边形,并用当前画刷填充,12,绘图实例,使用前面介绍的绘图函数在屏幕上画直线、矩形等步骤用向导AppWizard生成单文档工程TestGraph编辑视图类CTestGraphView中的OnDraw函数,实现画图功能,代码如下:VoidCTestGraphView:OnDraw(CDC*pDC)CTestGraphDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);pDC-MoveTo(20,90);pDC-LineTo(120,90);,13,POINTpolyline=70,240,20,190,70,190,20,240;pDC-Polyline(polyline,sizeof(polyline)/sizeof(POINT);pDC-Rectangle(210,300,310,360);pDC-Ellipse(210,200,310,260);运行程序注意绘图坐标轴方向缺省值,14,3使用绘图属性,15,3.1画笔,画笔的操作创建画笔将画笔选入设备环境恢复原有画笔画笔的创建用类CPen的CreatePen方法,16,PS_DASH:虚线(宽度=1)PS_DASHDOT:点划线(宽度=1)PS_DASHDOTDOT:双点划线(宽度=1)PS_DOT:点线(宽度=1)PS_INSIDEFRAME:实线PS_NULL:无PS_SOLID:实线,BOOLCreatePen(intnPenStyle,/确定画笔样式intnWidth,/画笔宽度COLORREFrgbColor/画笔颜色);,17,创建画笔后,必须调用SelectObject函数将其选入设备环境。pOldPen=pDC-SelectObject(,18,Windows使用宏RGB定义绘图的颜色,其形式为:RGB(nRed,nGreen,nBlue),红色:RGB(255,0,0),蓝色:RGB(0,0,255),绿色:RGB(0,255,0),颜色的设置,19,画笔实例,VoidCPenTestView:OnDraw(CDC*pDC)CTestGraphDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);CPenpNewPen,*pOldPen;if(pNewPen.CreatePen(PS_DASH,1,RGB(0,0,0)pOldPen=pDC-SelectObject(,20,elseAfxMessageBox(“不能创建笔!”);return;CPenpNewPen2;if(pNewPen2.CreatePen(PS_SOLID,10,RGB(0,0,0)pOldPen=pDC-SelectObject(,21,CPenpNewPen3;if(pNewPen3.CreatePen(PS_SOLID,5,RGB(255,0,0)pOldPen=pDC-SelectObject(,22,3.2使用画刷-CBrush类,画刷的操作,包括:创建、选入设备环境和删除画刷的创建步骤生成一种画刷CBrush();无参数的构造函数构造了一个未初始化的CBrush对象,使用它之前必须对它进行初始化,带参数的构造函数则不用。(2)CBrush(CBitmap*pBitmap);pBitmap:指向用作刷子的位图对象指针,23,(3)CBrush(COLORREFcrColor);crColor:制定刷子颜色(4)CBrush(intnIndex,COLORREFcrColor);nIndex:指定画刷风格,24,HS_BDIAGONAL45度从左上到右下HS_DIAGCROSS45度叉线HS_FDIAGONAL45度从左下到右上HS_CROSS垂直相交的阴影线HS_HORIZONTAL水平阴影线HS_VERTICAL垂直阴影线,调用CBrush对象的函数初始化刷子(1)创建具有指定颜色的单色画刷CreateSolidBrush(COLORREFrgbColor);(2)创建指定阴影图案和颜色的画刷CreateHatchBrush(intnHctchStyle,COLORREFrgbColor);,25,将画刷选入设备环境pOldBrush=pDC-SelectObject(,26,画刷应用实例,1利用向导生成工程BrushTest,2.编辑视图类的OnDraw()函数,设置各种画刷,27,VoidCBrushTestView:OnDraw(CDC*pDC)CBrushTestDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);inti;CBrush*pNewBrush,*pOldBrush;pNewBrush=newCBrush;if(pNewBrush-CreateSolidBrush(RGB(255,0,0);pOldBrush=pDC-SelectObject(pNewBrush);pDC-Rectangle(40,20,200,50);pDC-SelectObject(pOldBrush);deletepNewBrush;,28,pNewBrush=newCBrush;if(pNewBrush-CreateHatchBrush(HS_BDIAGONAL,RGB(200,0,0)pOldBrush=pDC-SelectObject(pNewBrush);pDC-Ellipse(260,20,420,50);pDC-SelectObject(pOldBrush);deletepNewBrush;,29,CBitmapPBitmap;pNewBrush=newCBrush;PBitmap.LoadBitmap(IDB_BITMAP1);pNewBrush-CreatePatternBrush(,30,3.3映像模式,映像模式定义了将逻辑单位转化为设备的度量单位,以及x和y方向;窗口对应逻辑坐标系上所设定的区域;视口对应实际输出设备上所设定的区域。,31,坐标系统逻辑坐标系统设备坐标系统:以象素点为单位屏幕整个屏幕坐标区为坐标系统窗口应用程序的窗口为坐标区(含边界)用户区窗口中的工作区为坐标系统,32,缺省的映射模式,将窗口中的对称图形映射到视口时仍为对称图形,按照窗口和视口的坐标比例进行映射,33,映像模式的设置根据需要设置映像模式Pdc-SetMapMode(MM_TEXT);,34,视口和窗口的原点坐标缺省值均为(0,0)可调用函数SetWindowOrgEx设定窗口原点。可调用函数SetViewportOrgEx设定视口原点。,只有在映射模式为MM_ANISOTROPIC和MM_ISOTROPIC时才有意义,35,坐标系使用原则:大多数CDC成员函数如绘图函数以逻辑坐标为参数CWnd的成员函数以设备坐标为参数从鼠标消息如WM_LBUTTONDOWN获得的鼠标位置都是设备坐标坐标转换函数:LPToDP:逻辑坐标-设备坐标DPToLP:设备坐标-逻辑坐标,36,3.4.图形刷新,出现如下情况时,系统发送WM_PAINT消息:窗口大小的调整;窗口移动;被覆盖后的恢复。应用程序收到该消息时要调用OnPaint()完成窗口的重绘,37,有时,没有上述窗口的大小改变也需要重绘窗口,如用户希望窗口中的数据添加一些内容,这时需要调用CWnd的成员函数:(1)voidInvalidate(BOOLbErase=TRUE)作用:使整个客户区无效,由此引发WM_PAINT消息bErase=TRUE时更新区的背景被擦除,否则,更新区的背景保持不变(2)voidInvalidateRect(LPCRECTlpR
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年厦门软件职业技术学院单招职业技能测试题库及参考答案详解一套
- 2026年山西省太原市单招职业适应性考试题库及参考答案详解
- 2026年河南建筑职业技术学院单招职业技能考试题库及参考答案详解1套
- 2026年南京特殊教育师范学院单招职业技能考试题库及完整答案详解1套
- 2026年辽宁省辽阳市单招职业倾向性测试题库含答案详解
- 2026年桂林山水职业学院单招职业倾向性测试题库及答案详解一套
- 2026年昭通卫生职业学院单招职业技能考试题库及答案详解一套
- 2026年河北司法警官职业学院单招职业倾向性考试题库参考答案详解
- 2025江苏盐城港控股集团有限公司招聘21人笔试考试参考试题及答案解析
- 2026年辽宁经济职业技术学院单招职业适应性考试题库及答案详解1套
- 流动车接种活动方案
- 《铁路路基施工与维护》高职高速铁路施工与维护全套教学课件
- GB/T 34722-2025浸渍胶膜纸饰面胶合板和细木工板
- 礼品登记使用管理制度
- 2025-2030中国住房公积金行业运行状况与发展前景预测报告
- 2025年长护险考试试题及答案
- 挂名财务免责协议书
- JJF(鄂) 118-2024 电子防潮柜湿度、温度偏差校准规范
- 年产2万吨抗静电擦拭布项目初步设计(参考)
- 《结直肠癌的治疗进展》课件
- ☆合同模板大全
评论
0/150
提交评论