vc第4章Windows的图形设备接口及绘图_第1页
vc第4章Windows的图形设备接口及绘图_第2页
vc第4章Windows的图形设备接口及绘图_第3页
vc第4章Windows的图形设备接口及绘图_第4页
vc第4章Windows的图形设备接口及绘图_第5页
已阅读5页,还剩39页未读 继续免费阅读

下载本文档

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

文档简介

1、1Visual C+第四章Windows的图形设备接口及绘图2022/9/112内容提要Windows图形设备接口绘图工具和颜色常用绘图函数应用实例.2022/9/1134.1 Windows图形设备接口(GDI)GDI的基本概念图形刷新获取设备环境的方法映像模式.2022/9/114(1) GDI的基本概念GDI是Windows的重要组成部分与设备无关的图形设备接口GDIGraphics Device Interface就是操作系统屏蔽了硬件设备的差异用户编程时无需考虑特殊的硬件设置实现系统与用户或绘图程序之间的信息交换控制在输出设备上显示图形或文字.2022/9/115用GDI和设备驱动程

2、序支持图形的输出Device independence is one of the chief features of Microsoft Windows. Applications can draw and print output on a variety of devices.(1) GDI的基本概念Windows支持与设备无关的图形GDI和设备驱动程序开发人员只要建立与输出设备的关联,让系统加载相应的设备驱动程序.2022/9/116(1) GDI的基本概念设备环境 (Device Contexts, DC)A device context is a structure that de

3、fines a set of graphic objects and their associated attributes, as well as the graphic modes that affect output.设备环境的属性的集合 (设备描述表 )应用程序通过设备描述表的句柄,建立与设备的联系,实现图形操作。.2022/9/117(1) GDI的基本概念应用程序通过设备描述表的句柄,建立与设备的联系,实现图形操作。Win系统外设用户直接访问不允许统一的设备环境(DC)提供使应用程序与设备相连.(1) GDI的基本概念Device Contexts应用程序设备描述表及其属性设备描述

4、表的句柄(间接地存取)应用程序每一次图形操作均参照设备描述表中的属性执行(1) GDI的基本概念9.(2)图形刷新绘图中必须考虑的重要问题,包括:刷新请求;对刷新请求的响应;刷新方法。出现如下情况时,系统发送WM_PAINT消息作为刷新请求:窗口大小的调整;窗口移动;被覆盖后的恢复。10.(2)图形刷新对三种不同刷新请求的响应窗口移动后的刷新用户区移动或显示用户窗口大小改变程序通过滚动条滚动窗口被覆盖区域的刷新被另一个窗口覆盖的恢复对象穿越后的刷新(系统自动完成) 光标或图标拖过用户区11.应用程序在窗口中绘制了一个椭圆,颜色列表框覆盖椭圆的一部分关闭颜色选框后,应用程序需要恢复被覆盖部分的颜

5、色和形状(2)图形刷新12.2022/9/1113(2)图形刷新无效区域窗口被另一个窗口覆盖的区域PAINTSTRUCT结构Windows为每个窗口建立一个PAINTSTRUCT结构其中含有包围无效区域的一个最小矩形的结构RECT程序可据此矩形执行刷新操作Typedef struct tagPAINTSTRUCT HDC hdc; /设备环境句柄 BOOL fErase;/一般取真值,表示擦除无效矩形的背景 RECT rcPaint;/无效矩形标识 BOOL fRestore; /系统保留 BOOL fIncUpdate; /系统保留 BYTE rgbReserved16;/系统保留 PAIN

6、TSTRUCT;.2022/9/1114(2)图形刷新常用的刷新方法保存副本刷新时将副本拷贝到相应的窗口中。记录事件刷新时重新执行这个曾经发生的事件。重新绘制将图形绘制处理程序放在消息WM_PAINT响应模块中,刷新时重绘图形。.2022/9/1115(3) 获取设备环境的方法方法一:调用BeginPaint函数响应WM_PAINT消息刷新图形时,调用BeginPaint函数获取设备环境HDC WINAPI BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint);BeginPaint(hwnd,&ps)调用EndPaint函数释放由BeginPaint获取的设

7、备环境void EndPaint(HWND hwnd, PAINTSTRUCT &ps).2022/9/1116(3) 获取设备环境的方法方法二:调用GetDC函数如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境。HDC GetDC(HWND hWnd);hdc=GetDC(hwnd); 由GetDC获取的设备环境须用ReleaseDC释放void ReleaseDC(HWND hwnd);.(3) 获取设备环境的方法2022/9/1118(4) 映像模式映像模式定义了将逻辑单位转化为设备的度量单位,以及x和y方向;程序员可在一个统一的逻辑坐标系中操作,不必考虑输出

8、设备的坐标系情况。窗口对应逻辑坐标系上所设定的区域;视口对应实际输出设备上所设定的区域。.2022/9/1119(4) 映像模式坐标系统逻辑坐标系统设备坐标系统:以象素点为单位屏幕整个屏幕坐标区为坐标系统窗口应用程序的窗口为坐标区(含边界)用户区窗口中的工作区为坐标系统.2022/9/11(4) 映像模式xViewport=(xWindow xWinOrg)*(xViewExt/xWinExt)+xViewOrgyViewport=(yWindow yWinOrg)*(yViewExt/yWinExt)+yViewOrg20.缺省的映射模式将窗口中的对称图形映射到视口时仍为对称图形按照窗口和视

9、口的坐标比例进行映射(4) 映像模式2022/9/1122(4) 映像模式映像模式的设置应用程序可获取设备环境的当前映像模式nMapMode=GetMapMode(hdc);/ nMapMode为映像模式的整型标识符。根据需要设置映像模式SetMapMode(hdc,nMapMode);.2022/9/1123(4) 映像模式窗口区域的定义函数:BOOL Set WindowExtEx( HDC hdc, int nHeight,nWidth, /窗口高宽,以逻辑单位表示。 LPSIZE lpSize /原窗口区域尺寸的SIZE结构地址 );视口区域的定义函数:BOOL Set Viewpor

10、tExtEx( HDC hdc, int nHeight,nWidth, /新视口高宽,以物理设备单位表示 LPSIZE lpSize );.2022/9/1124(4) 映像模式视口和窗口的原点坐标缺省值均为(0,0)。可调用函数SetWindowOrgEx设定窗口原点。可调用函数SetViewportOrgEx设定视口原点。SetWindowOrgEx函数的原形:BOOL SetWindowOrgEx( HDC hdc, int X,Y, /以逻辑单位表示的窗口原点坐标 LPPOINT lpPoint /函数调用前原点坐标的POINT结构的地址).2022/9/11254.2.绘图工具和颜

11、色画笔画刷颜色的设置.(1) 画笔画笔的操作创建画笔将画笔选入设备环境删除画笔画笔的创建 使用前必须先定义一个画笔句柄。 HPEN hP; Windows系统定义的四种画笔 调用函数GetStockObject获取一种画笔,如: hP=GetStockObject(BLACK_PEN); /取黑色笔WHITE_PENBLACK_PENDC_PENNULL_PEN26.(1) 画笔创建新画笔hP=CreatePen( int nPenStyle, /确定画笔样式 int nWidth, /画笔宽度 COLORREF rgbColor /画笔颜色);PS_DASH:虚线PS_DASHDOT:点划线

12、PS_DASHDOTDOT: 双点划线PS_DOT:点线PS_INSIDEFRAME:实线PS_NULL:无PS_SOLID:实线27.(1) 画笔创建画笔后,必须调用SelectObject函数将其选入设备环境。 SelectObject(hdc,hP); /hP为所创建或获取的画笔句柄不再使用当前画笔时,需删除之,释放内存。DeleteObject(hP);28.(2) 画刷画刷的操作创建选入设备环境删除。画刷的创建使用画刷需先定义一个画刷句柄。 HBRUSH hBr; /hBr为画刷句柄调用函数GetStockObject获取一种画刷hBr=(HBRUSH)GetStockObject(

13、nBrushStyle)29.(2) 画刷Windows系统提供的7种画刷样式BLACK_BRUSH黑色画刷DKGRAY_BRUSH深灰色画刷GRAY_BRUSH灰色画刷HOLLOW_BRUSH虚画刷LTGRAY_BRUSH 亮灰色画刷NULL_BRUSH空画刷WHITE_BRUSH白色画刷30.HS_BDIAGONAL 45度从左上到右下HS_DIAGCROSS 45度叉线HS_FDIAGONAL 45度从左下到右上HS_CROSS 垂直相交的阴影线HS_HORIZONTAL 水平阴影线HS_VERTICAL垂直阴影线(2) 画刷可调用创建画刷函数:创建具有指定颜色的单色画刷 hBr=Cre

14、ateSolidBrush(rgbColor);创建指定阴影图案和颜色的画刷 hBr=CreateHatchBrush(int nHctchStyle, COLORREF rgbColor);31.(2) 画刷将画刷选入设备环境 SelectObject(hdc,hBr);不使用画刷时,可删除画刷,释放内存DeleteObject(hBr);32.(3) 颜色的设置Windows使用宏RGB定义绘图的颜色,其形式为: RGB(nRed,nGreen,nBlue) 红色RGB(255,0,0)蓝色RGB(0,0,255)绿色RGB(0,255,0)33.2022/9/11344.3.常用绘图函数

15、直线折线形圆弧线饼图矩形椭圆多边形.2022/9/11354.3.常用绘图函数(1) MoveToEx 设置画笔当前位置BOOL MoveToEx( HDC hdc, int X,Y,/ X、Y分别为新位置的逻辑坐标 LPPOINT lpPoint /原画笔位置的POINT结构地址)(2) LineToEx 从当前位置向指定点画直线BOOL LineToEx(HDC hdc,int X,int Y)/X和Y为线段的终点坐标.2022/9/11364.3.常用绘图函数(3) Polyline 依次连接各点的折线BOOL Polyline ( HDC hdc, LPPOINT lpPoints,

16、/各点坐标的POINT结构数组指针 int nCount / POINT数组中点的个数).(4) Arc 绘制椭圆弧线BOOL Arc(HDC hdc, int X1,intY1, /边框矩形左上角的逻辑坐标 int X2,int Y2,/边框矩形右下角的逻辑坐标 int X3,int Y3,/椭圆弧起始经线的确定点坐标 int X4,int Y4/椭圆弧终止经线的确定点坐标)4.3.常用绘图函数37.4.3.常用绘图函数(5) Pie 绘制饼图,并用当前画刷填充BOOL Pie(HDC hdc, int X1,intY1,/边框矩形左上角的逻辑坐标 int X2,int Y2,/边框矩形右下

17、角的逻辑坐标 int X3,int Y3,/椭圆弧起始经线的确定点坐标 int X4,int Y4/椭圆弧终止经线的确定点坐标)38.(6) 绘制矩形,并用当前画刷填充BOOL Rectangle(HDC hdc,int X1,int Y1,int X2,int Y2)(7) 绘制圆角矩形,并用当前画刷填充BOOL RoundRect (HDC hdc,int X1,int Y1,int X2,int Y2, int nHeight, int nWidth)(X1,Y1)和(X2,Y2)分别为矩形的左上角和右下角的逻辑坐标圆角的高度和宽度4.3.常用绘图函数39.8. 绘制椭圆,并用当前画刷填充BOOL Ellipse(HDC hdc, intX1,intY1,intX2,intY2)9绘制多边形,并用当前画刷填充BOOL Polygon(HDC hdc, LPPOINT lpPoints,int nCount)包含各点坐标的POINT数组的地址多边形点的个数4.3.常用绘图函数40.使用虚画刷填充时,看不出填充效果!4.4.应用实例例4-1利用绘图函数创建填充区,三个填充图形:深灰色画刷填充带圆角的矩形,亮灰色画刷填充一个椭圆型图,虚画刷填充饼形图。例子程序:GDIBasic41.4.4.应用实例例4-2设置映射与使用映

温馨提示

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

评论

0/150

提交评论