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

下载本文档

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

文档简介

1、第3章Windows的图形设备接口及Windows绘图,主要内容 图形设备接口 绘图工具与颜色 常用绘图函数 习题: 4-6,4-8,4.1 图形设备接口 图形设备接口(GDI,Grophlcs Devlce Interface) 负责加载相应的设备驱动程序,控制在输出设备上显示图形、文字,提供与设备无关的绘图工具。 4.1.1 图形处理的基本概念 用户(客户)区 除了窗口边框之外的中间空白区。 设备环境 (Device Context(Dc)或设备上下文、设备描述符表) 相当于画布,把应用程序与设备驱动相联的一种数据结构,每个设备必须配备一个设备环境。 Dc定义了图形对象及其属性的结构(表4

2、-l、表4-2)。 图形对象及其属性:图形模式及其输出,设备输出区域、画笔、画刷、选择的字体和颜色、目标映射方式等。 创建设备环境 应用程序不能直接存取设备环境,只能使用设备环境句柄标识设备,间接存取设备环境及其属性。 释放设备环境 应用程序访问结束时,要释放设备环境句柄(资源)。,4.1.2 图形刷新 绘图变化显示需要图形刷新,如用户区绘制了一个椭圆,并在其上显示一个颜色列表框,列表框覆盖了椭圆的一部分,当用户关闭列表框后,要用图形刷新恢复椭圆被覆盖部分的颜色和形状。 刷新过程:包括刷新请求、系统对刷新的响应以及刷新方法。 刷新请求 当用户区的内容需要刷新时,系统在应用程序的消息队列中加入W

3、M_PAINT消息,通知窗口函数执行刷新处理。 系统对刷新响应的条件 窗口移动后(如下),系统向应用程序发送WM_PAINT消息: 用户区移动或显示。 用户窗口大小改变。 通过滚动条滚动窗口。 窗口第一次显示 在执行ShowWindow函数后,调用函数UpdateWindow更新绘制客户区,发出WM_PAINT消息,实现重画客户的内容。,被覆盖区域的刷新 当下例事件发生时,Windows系统将恢复保存的被覆盖区域: 下拉式菜单关闭。 清除对话框或消息框等对象。 被另一个窗口覆盖的区域(称为无效区域),无效区域的产生可导致系统向应用程序发送一条消息。 系统为每个窗口建立了一个PAINTSTRUC

4、T结构,该结构变量将记录一个最小矩形(无效区域)的结构RECT,应用程序是无效矩形执行刷新操作。 对象穿越后的刷新 光标穿过用户区。 图标拖过用户区。 对象穿越后,Windows自动完成刷新,应用程序不考虑。,刷新的常用方法 对于简单图形,采用重新绘制图形方法执行刷新。 在应用程序中,将图形绘制处理程序放在消息WM_PAINT响应模块中,一旦程序接收到刷新请求即可重绘图形。 记录曾发生的事件,在需要刷新时重新调用窗口执行这个事件。 位图等复杂图形刷新,是在内存中保持一个显示输出的副本,当需要重绘窗口时,将副本复制到相应的窗口中。 4.1.3 获取设备环境句柄 输出图形必须先获取设备环境句柄(3

5、种方法) 1调用BeginPaint函数获得设备环境句柄 如:hdcBeginPaint(hwnd,ps); 其中:hwnd-访问设备环境的应用程序窗口句柄; ps-指向变量ps的指针。 ps是结构类型PAINTSTRUCT的变量,定义方式为: PAINTSTRUCT ps 结构类型PAINTSTRUCT Windows系统提供的标识无效区域的结构,在WINDOW.H中定义:,typedef struct tagPAINTSTRUCT HDC hdc; / 设备环境句柄 BOOL fErase ; / 确定背景是否被重新绘制,一般取真值,表示擦除无效矩形的背景 RECT rcPaint;/无效

6、区域(标识重绘的区) BOOL fRestore; /保留字段 BOOL fIncUpdate; /保留字段 BYTE rgbReserved16;/保留字段 PAINTSTRUCT; 系统调用BeginPaint 时,填写ps结构以标识需要刷新的无效区,为实现重绘提供记录。 rcPaint为RECT数据结构的变量,标识无效矩形。RECT结构定义: typedef struct tagRECT LONG left; /矩形框左上角x坐标 LONG top; /矩形框左上角Y坐标 LONG right; /矩形框右上角X坐标 LONG bottom ;/矩形框右上角Y坐标 RECT;,释放设备环

7、境,用EndPaint函数,其原型为: BOOL EndPaint(HWND hwnd,PAINTSTRUCT ps) 2调用GetDC函数 适应绘图不是由WM_PAINT消息驱动,或对整个客户区及客户区之外进行重画的情况。GetDC函数的原型声明: hdc=GetDC(hwnd); ReleaseDC 释放设备环境,函数原型: ReleaseDC(hwnd)。 3调用GetDCEx函数 GetDCEx函数返回指向特定窗口的客户区或整个窗口的句柄,是GetDC的扩展。它的释放也是用ReleaseDC函数。,4.1.4 映射模式(坐标系设置) 1坐标系统与映射模式 坐标系:逻辑、设备坐标系(属于

8、物理坐标系)。 逻辑坐标系 绘画操作的虚拟空间坐标。除了MMTEXT映射方式外,映射方式的原点为左下角,应用程序使用逻辑坐标。 设备坐标 显示器上的坐标系,以像素点表示度量单位,原点为左上角,右下角的坐标与分辩率有关,如(640,480)、(800,600)、(1024,768)等。 由GetSystemMetrics(SM_CXSCREEN)取得屏幕宽度; 由GetSystemMetrics(SM_CYSCREEN)取得屏幕高度。 设备坐标的三种类型 屏幕坐标 使用整个屏幕作为坐标区域。 窗口坐标 使用边界在内的窗口作为坐标区域。 用户区坐标 窗口内不含窗边的区域,不含菜单条、滚动条等。 映

9、射模式 因应用程序做图以点为单位,在显示器或打印机的输出(单位不同)比例不合适,只有将逻辑坐标转化到设备坐标系中,才能在视口(使用设备坐标的窗口)中显示输出图形,或在打印机上打印。 Windows中的映射模式有九种,如表4-4所示,默认模式是MM_TEXT。,2映射模式的设置 (1)设置映射模式函数 SetMapMode(hdc,nMapMode) /nMapMode为表4_4的映射模式:(前2个为非约束映射模式) MM_ANISOTROPIC:x、y方向使用自定义的长度单位,x、y单位可不同,单位由SetWindowExtEx和SetViewportExtEx确定 ; MM_ISOTROPI

10、C: x、y方向使用自定义的长度单位,x、y单位相同,单位由SetWindowExtEx和SetViewportExtEx确定 ; MM_TEXT :以像素为单位,原点为左上角; MM_TWIPS:以1/1440英寸为单位,原点为左下角; MM_HIENGLISH:以0.001英寸为单位,原点为左下角; MM_HIMETRIC:以0.01毫米为单位,原点为左下角; MM_LOENGLISH:以0.01英寸为单位,原点为左下角; MM_ LOMETRIC:以0.1毫米为单位,原点为左下角; (2)获取当前设备环境的映射模式函数 nMapMode = GetMapMode (hdc);以代码的形式

11、获得,(3) 窗口区域的定义函数 BOOL SetWindowExtEx ( HDC hdc, int nHeight, / nHeight为新窗口区域高度(逻辑单位) int nWidth, / nWidth 为新窗口区域宽度(逻辑单位) LPSIZE lpSize ) /lpSize为保存函数调用前窗口区域尺寸的SIZE结构地址,如果取NULL则表示忽略调用前的尺寸 (4)视口(设备坐标的窗口)区域定义函数 BOOL SetViewportExtEx ( HDC hdc, int nHeight, /nHeight为新视口区域高度(设备单位) int nWidth, /nWidth为新视口

12、区域宽度(设备单位) LPSIZE lpSize )/lpSize为保存函数调用前视口区域尺寸的SIZE结构地址,如果取NULL,则表示忽略调用前的尺寸,(5) 设定窗口的原点函数 SetWindowOrgEx函数的原型为: BOOL SetWindowOrgEx ( HDC hdc, int X, / X和Y为窗口内绘图的新原点坐标(逻辑单位) int Y, LPPOINT lpPoint )/lpPoint为保存函数调用前原点坐标的POINT结构的地址,取NULL则忽略调用前的尺寸 (6)设定视口的原点函数 SetViewportOrgEx函数的原型为: BOOL SetViewportO

13、rgEx ( HDC hdc, int X, / X和Y为视口内绘图的新原点坐标(设备单位) int Y, LPPOINT lpPoint /lpPoint为保存函数调用前原点坐标的POINT结构的地址,取NULL则忽略调用前的尺寸 ),3. 窗口坐标与视区坐标的转换 (1)窗口坐标与视口坐标的转换关系 从窗口坐标(xWin,yWin)到视口坐标(xView,yView)的转换公式: xView= xView Org+(xWin xWinOrg) xViewExt/ xWinExt yView= yView Org+(yWin yWinOrg) yViewExt/ yWinExt 其中:(xV

14、iew Org, yView Org)、(xWinOrg,yWinOrg )是视口、窗口的坐标原点。xViewExt/ xWinExt 、 yViewExt/ yWinExt 是视口坐标和窗口坐标的转换比例。 (2)物理坐标转逻辑坐标函数 应用程序从视口坐标转换为窗口坐标时,使用转换函数DPtoLP: DPtoLP(hdc, 改变窗口大小(窗口被创建、移动、改变大小、从图标状态下恢复); 覆盖用户区的菜单或对话框等无效区关闭时; 调用ScrollWindow函数(卷起); 调用函数InvalidateRect或InvalidateRgn。,InvalidateRect和InvalidateRgn函数的说明 InvalidateRect和InvalidateRgn函数,把用户区标记为无效而要求重新显示,强迫产生一条WM_PAINT消息。 InvalidateRect(与InvalidateRgn类似)函数原型说明: void InvalidateRect(HWND hwnd,const RECT FAR * lprc,BOOL fErase); Hwnd- 窗口句柄; Lprc-指定窗口客户区内矩形区域标记为无效,若lpr

温馨提示

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

最新文档

评论

0/150

提交评论