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

下载本文档

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

文档简介

Visual C+,第四章 Windows的 图形设备接口及绘图,2019/7/26,1,内容提要,Windows图形设备接口 绘图工具和颜色 常用绘图函数 应用实例,2019/7/26,2,4.1 Windows图形设备接口(GDI),GDI的基本概念 图形刷新 获取设备环境的方法 映像模式,2019/7/26,3,(1) GDI的基本概念,GDI是Windows的重要组成部分 与设备无关的图形设备接口 GDIGraphics Device Interface 就是操作系统屏蔽了硬件设备的差异 用户编程时无需考虑特殊的硬件设置 实现系统与用户或绘图程序之间的信息交换 控制在输出设备上显示图形或文字,2019/7/26,4,用GDI和设备驱动程序支持图形的输出 Device independence is one of the chief features of Microsoft Windows. Applications can draw and print output on a variety of devices.,(1) GDI的基本概念,2019/7/26,5,Windows,支持与设备无关的图形,GDI和 设备驱动程序,开发人员只要建立与输出设备的关联, 让系统加载相应的设备驱动程序,(1) GDI的基本概念,设备环境 (Device Contexts, DC) A device context is a structure that defines a set of graphic objects and their associated attributes, as well as the graphic modes that affect output. 设备环境的属性的集合 (设备描述表 ) 应用程序通过设备描述表的句柄,建立与设备的联系,实现图形操作。,2019/7/26,6,(1) GDI的基本概念,应用程序通过设备描述表的句柄,建立与设备的联系,实现图形操作。,2019/7/26,7,Win系统,外设,用户,直接访问,不允许,统一的设备环境(DC),提供,使应用程序与设备相连,(1) GDI的基本概念,Device Contexts,应用程序,设备描述表及其属性,设备描述表的句柄 (间接地存取),应用程序每一次图形操作均参照设备描述表中的属性执行,(1) GDI的基本概念,(2)图形刷新,绘图中必须考虑的重要问题,包括: 刷新请求; 对刷新请求的响应; 刷新方法。 出现如下情况时,系统发送WM_PAINT消息作为刷新请求: 窗口大小的调整; 窗口移动; 被覆盖后的恢复。,(2)图形刷新,对三种不同刷新请求的响应 窗口移动后的刷新 用户区移动或显示 用户窗口大小改变 程序通过滚动条滚动窗口 被覆盖区域的刷新 被另一个窗口覆盖的恢复 对象穿越后的刷新(系统自动完成) 光标或图标拖过用户区,应用程序在窗口中 绘制了一个椭圆, 颜色列表框覆盖椭圆的一部分,关闭颜色选框后, 应用程序需要恢 复被覆盖部分的颜色和形状,(2)图形刷新,(2)图形刷新,无效区域 窗口被另一个窗口覆盖的区域 PAINTSTRUCT结构 Windows为每个窗口建立一个PAINTSTRUCT结构 其中含有包围无效区域的一个最小矩形的结构RECT 程序可据此矩形执行刷新操作,2019/7/26,13,Typedef struct tagPAINTSTRUCT HDC hdc; /设备环境句柄 BOOL fErase;/一般取真值,表示擦除无效矩形的背景 RECT rcPaint; /无效矩形标识 BOOL fRestore; /系统保留 BOOL fIncUpdate; /系统保留 BYTE rgbReserved16;/系统保留 PAINTSTRUCT;,(2)图形刷新,常用的刷新方法 保存副本 刷新时将副本拷贝到相应的窗口中。 记录事件 刷新时重新执行这个曾经发生的事件。 重新绘制 将图形绘制处理程序放在消息WM_PAINT响应模块中,刷新时重绘图形。,2019/7/26,14,(3) 获取设备环境的方法,方法一:调用BeginPaint函数 响应WM_PAINT消息刷新图形时,调用BeginPaint函数获取设备环境 HDC WINAPI BeginPaint(HWND hWnd, LPPAINTSTRUCT lpPaint); BeginPaint(hwnd,&ps) 调用EndPaint函数释放由BeginPaint获取的设备环境 void EndPaint(HWND hwnd, PAINTSTRUCT &ps),2019/7/26,15,(3) 获取设备环境的方法,方法二:调用GetDC函数 如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境。 HDC GetDC(HWND hWnd); hdc=GetDC(hwnd); 由GetDC获取的设备环境须用ReleaseDC释放 void ReleaseDC(HWND hwnd);,2019/7/26,16,(3) 获取设备环境的方法,(4) 映像模式,映像模式 定义了将逻辑单位转化为设备的度量单位,以及x和y方向; 程序员可在一个统一的逻辑坐标系中操作,不必考虑输出设备的坐标系情况。 窗口 对应逻辑坐标系上所设定的区域; 视口 对应实际输出设备上所设定的区域。,2019/7/26,18,(4) 映像模式,坐标系统 逻辑坐标系统 设备坐标系统:以象素点为单位 屏幕整个屏幕坐标区为坐标系统 窗口应用程序的窗口为坐标区(含边界) 用户区窗口中的工作区为坐标系统,2019/7/26,19,(4) 映像模式,xViewport=(xWindow xWinOrg)*(xViewExt/xWinExt)+xViewOrg yViewport=(yWindow yWinOrg)*(yViewExt/yWinExt)+yViewOrg,2019/7/26,(4) 映像模式,(4) 映像模式,映像模式的设置 应用程序可获取设备环境的当前映像模式 nMapMode=GetMapMode(hdc); / nMapMode为映像模式的整型标识符。 根据需要设置映像模式 SetMapMode(hdc,nMapMode);,2019/7/26,22,(4) 映像模式,窗口区域的定义函数: BOOL Set WindowExtEx ( HDC hdc, int nHeight,nWidth, /窗口高宽,以逻辑单位表示。 LPSIZE lpSize /原窗口区域尺寸的SIZE结构地址 ); 视口区域的定义函数: BOOL Set ViewportExtEx ( HDC hdc, int nHeight,nWidth, /新视口高宽,以物理设备单位表示 LPSIZE lpSize );,2019/7/26,23,(4) 映像模式,视口和窗口的原点坐标 缺省值均为(0,0)。 可调用函数SetWindowOrgEx设定窗口原点。 可调用函数SetViewportOrgEx设定视口原点。 SetWindowOrgEx函数的原形: BOOL SetWindowOrgEx ( HDC hdc, int X,Y, /以逻辑单位表示的窗口原点坐标 LPPOINT lpPoint /函数调用前原点坐标的POINT结构的地址),2019/7/26,24,4.2.绘图工具和颜色,画笔 画刷 颜色的设置,2019/7/26,25,(1) 画笔,画笔的操作 创建画笔 将画笔选入设备环境 删除画笔 画笔的创建 使用前必须先定义一个画笔句柄。 HPEN hP; Windows系统定义的四种画笔 调用函数GetStockObject获取一种画笔,如: hP=GetStockObject(BLACK_PEN); /取黑色笔,WHITE_PEN BLACK_PEN DC_PEN NULL_PEN,(1) 画笔,创建新画笔 hP=CreatePen ( int nPenStyle, /确定画笔样式 int nWidth, /画笔宽度 COLORREF rgbColor /画笔颜色 );,PS_DASH: 虚线 PS_DASHDOT: 点划线 PS_DASHDOTDOT: 双点划线 PS_DOT: 点线 PS_INSIDEFRAME: 实线 PS_NULL: 无 PS_SOLID: 实线,(1) 画笔,创建画笔后,必须调用SelectObject函数将其选入设备环境。 SelectObject(hdc,hP); /hP为所创建或获取的画笔句柄 不再使用当前画笔时,需删除之,释放内存。 DeleteObject(hP);,(2) 画刷,画刷的操作 创建 选入设备环境 删除。 画刷的创建 使用画刷需先定义一个画刷句柄。 HBRUSH hBr; /hBr为画刷句柄 调用函数GetStockObject获取一种画刷 hBr=(HBRUSH)GetStockObject(nBrushStyle),(2) 画刷,Windows系统提供的7种画刷样式 BLACK_BRUSH 黑色画刷 DKGRAY_BRUSH 深灰色画刷 GRAY_BRUSH 灰色画刷 HOLLOW_BRUSH 虚画刷 LTGRAY_BRUSH 亮灰色画刷 NULL_BRUSH 空画刷 WHITE_BRUSH 白色画刷,HS_BDIAGONAL 45度从左上到右下 HS_DIAGCROSS 45度叉线 HS_FDIAGONAL 45度从左下到右上 HS_CROSS 垂直相交的阴影线 HS_HORIZONTAL 水平阴影线 HS_VERTICAL 垂直阴影线,(2) 画刷,可调用创建画刷函数: 创建具有指定颜色的单色画刷 hBr=CreateSolidBrush(rgbColor); 创建指定阴影图案和颜色的画刷 hBr=CreateHatchBrush(int nHctchStyle, COLORREF rgbColor);,(2) 画刷,将画刷选入设备环境 SelectObject(hdc,hBr); 不使用画刷时,可删除画刷,释放内存 DeleteObject(hBr);,(3) 颜色的设置,Windows使用宏RGB定义绘图的颜色,其形式为: RGB(nRed,nGreen,nBlue),红色 RGB(255,0,0),蓝色 RGB(0,0,255),绿色 RGB(0,255,0),4.3.常用绘图函数,直线 折线形 圆弧线 饼图 矩形 椭圆 多边形,2019/7/26,34,4.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为线段的终点坐标,2019/7/26,35,4.3.常用绘图函数,(3) Polyline 依次连接各点的折线 BOOL Polyline ( HDC hdc, LPPOINT lpPoints, /各点坐标的POINT结构数组指针 int nCount / POINT数组中点的个数 ),2019/7/26,36,(4) Arc 绘制椭圆弧线 BOOL Arc (HDC hdc, int X1,intY1, /边框矩形左上角的逻辑坐标 int X2,int Y2, /边框矩形右下角的逻辑坐标 int X3,int Y3, /椭圆弧起始经线的确定点坐标 int X4,int Y4 /椭圆弧终止经线的确定点坐标 ),4.3.常用绘图函数,4.3.常用绘图函数,(5) Pie 绘制饼图,并用当前画刷填充 BOOL Pie (HDC hdc, int X1,intY1, /边框矩形左上角的逻辑坐标 int X2,int Y2, /边框矩形右下角的逻辑坐标 int X3,int Y3, /椭圆弧起始经线的确定点坐标 int X4,int Y4 /椭圆弧终止经线的确定点坐标 ),(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.常用绘图函数,8. 绘制椭圆,并用当前画刷填充 BOOL Ellipse(HDC hdc, intX1,intY1,intX2,intY2) 9绘制多边形,并用当前画刷填充 BOOL Polygon(HDC hdc, LPPOINT lpPoints,int nCount),包含各点坐标的 POINT数组的地址,多边形点的个数,4.3.常用绘图函数,使用虚画刷填充时,看不出填充效果!,4.4.应用实例例4-1,利用绘图函数创建填充区,三个填充图形: 深灰色画刷填充带圆角的矩形, 亮灰色画刷填充一个椭圆型图, 虚画刷填充饼形图。 例子程序:GDIBasic,4.4.应用实例例4-2,设置

温馨提示

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

评论

0/150

提交评论