欢迎来到天天文库
浏览记录
ID:38505967
大小:516.55 KB
页数:53页
时间:2019-06-13
《黄维通VC+面向对象可视化程序设计》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第4章Windows的图形设备接口及Windows绘图Windows图形设备接口(GDI)是为与设备无关的图形设计的。所谓设备的无关性,就是操作系统屏蔽了硬件设备的差异,因而设备无关性能使用户编程时无需考虑特殊的硬件设置。Windows支持与设备无关的图形利用GDI和Windows设备驱动程序开发人员只要建立与输出设备的关联,让系统加载相应的设备驱动程序即可一、图形设备接口(GDI)GDI负责系统与用户或绘图程序之间的信息交换,并控制在输出设备上显示图形或文字,是Windows系统的重要组成部分。设备描述表即为设备环境的属性的集合。应用程序与输出设备之间的桥梁Win系统外设直接访问不允许统一
2、的设备环境(DC)提供使应用程序与设备相连用户为确保图形输出的设备无关性1.GDI的一些基本概念应用程序设备描述表及其属性通过设备描述表的句柄来间接地存取应用程序每一次图形操作均参照设备描述表中的属性执行图形刷新是绘图过程中必须考虑的重要问题刷新请求对刷新请求的响应刷新方法包括(1)刷新请求应用程序在窗口中绘制了一个椭圆,颜色列表框覆盖了椭圆的一部分关闭颜色选框后,应用程序需要恢复被覆盖部分的颜色和形状窗口大小的调整窗口移动被覆盖后的恢复2.图形刷新(2)系统对刷新请求的响应当用户区的内容需要刷新时,系统向应用程序消息队列发送WM_PAINT消息,系统在应用程序的消息队列中加入该消息,以通知
3、窗口函数执行刷新处理三种刷新窗口移动后的刷新被覆盖区域的刷新对象穿越后的刷新(系统自动完成)用户区移动或显示用户窗口大小改变程序通过滚动条滚动窗口窗口被另一个窗口覆盖的恢复如下拉式菜单关闭等光标穿过用户区图标拖过用户区窗口被另一个窗口覆盖的区域称为无效区域。Windows系统为每个窗口建立了一个PAINTSTRUCT结构,该结构中包含了包围无效区域的一个最小矩形的结构RECT,应用程序可以根据这个无效矩形执行刷新操作。TypedefstructtagPAINTSTRUCT{HDChdc;//设备环境句柄BOOLfErase;//一般取真值,表示擦除无效矩形的背景RECTrcPaint;//无
4、效矩形标识BOOLfRestore;//系统保留BOOLfIncUpdate;//系统保留BYTErgbReserved[16];//系统保留}PAINTSTRUCT;rcPaint为标准的RECT数据结构,其作用是标识无效矩形,它包含了无效矩形的左上角和右下角的坐标常用的Windows应用程序刷新窗口的方法保存副本。刷新时将副本拷贝到相应的窗口中记录事件。刷新时重新执行这个曾经发生的事件重新绘制。将图形绘制处理程序放在消息WM_PAINT响应模块中,刷新时重绘图形(3)有效的刷新方法获取设备环境是应用程序输出图形的先决条件,常用的两种方法是调用函数BeginPaint或GetDC(1)调用
5、BeginPaint函数应用程序响应WM_PAINT消息进行图形刷新时,主要通过调用BeginPaint函数获取设备环境hdc=BeginPaint(hwnd,&ps);//ps为PAINTSTRUCT类型结构定义方式为:PAINTSTRUCTps;系统获取设备环境的同时填写ps结构,以标识无效矩形区由BeginPaint函数获取的设备环境要用EndPaint函数释放voidEndPaint(HWNDhwnd,PAINTSTRUCT&ps)3.获取设备环境的方法(2)调用GetDC函数如果绘图工作并非由WM_PAINT消息驱动,则调用GetDC函数获取设备环境。hdc=GetDC(hwnd)
6、;由GetDC函数获取的设备环境必须用ReleaseDC函数释放voidReleaseDC(HWNDhwnd);映像模式定义了将逻辑单位转化为设备的度量单位以及设备的x方向和y方向,程序员可在一个统一的逻辑坐标系中操作而不必考虑输出设备的坐标系情况。窗口:对应逻辑坐标系上程序员设定的区域视口:对应实际输出设备上程序员设定的区域窗口和视口如何映射?4.映像模式默认的映射模式将窗口中的对称图形映射到视口时仍为对称图形按照窗口和视口的坐标比例进行映射坐标系统逻辑坐标系统设备坐标系统屏幕坐标系统窗口坐标系统用户区坐标系统应用程序可获取设备环境的当前映像模式,并根据需要设置映像模式。相关函数设置设备环
7、境的映像模式SetMapMode(hdc,nMapMode);nMapMode为映像模式的整型标识符获取当前设备环境的映像模式nMapMode=GetMapMode(hdc);窗口区域的定义由SetWindowExtEx函数完成,其函数原型为:BOOLSetWindowExtEx(HDChdc,intnHeight,nWidth,//以逻辑单位表示的窗口区域高宽度LPSIZElpSize,//函数调用前窗口区
此文档下载收益归作者所有