欢迎来到天天文库
浏览记录
ID:41103264
大小:203.96 KB
页数:22页
时间:2019-08-16
《Windows的图形设备接口及》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第3章Windows的图形设备接口及Windows绘图主要内容图形设备接口绘图工具与颜色常用绘图函数习题:4-6,4-84.1图形设备接口图形设备接口(GDI,GrophlcsDevlceInterface)负责加载相应的设备驱动程序,控制在输出设备上显示图形、文字,提供与设备无关的绘图工具。4.1.1图形处理的基本概念用户(客户)区除了窗口边框之外的中间空白区。设备环境(DeviceContext(Dc)或设备上下文、设备描述符表)相当于画布,把应用程序与设备驱动相联的一种数据结构,每个设备必须配备一个设备环境。Dc定义了图形
2、对象及其属性的结构(表4-l、表4-2)。图形对象及其属性:图形模式及其输出,设备输出区域、画笔、画刷、选择的字体和颜色、目标映射方式等。创建设备环境应用程序不能直接存取设备环境,只能使用设备环境句柄标识设备,间接存取设备环境及其属性。释放设备环境应用程序访问结束时,要释放设备环境句柄(资源)。4.1.2图形刷新绘图变化显示需要图形刷新,如用户区绘制了一个椭圆,并在其上显示一个颜色列表框,列表框覆盖了椭圆的一部分,当用户关闭列表框后,要用图形刷新恢复椭圆被覆盖部分的颜色和形状。刷新过程:包括刷新请求、系统对刷新的响应以及刷新方法
3、。刷新请求当用户区的内容需要刷新时,系统在应用程序的消息队列中加入WM_PAINT消息,通知窗口函数执行刷新处理。系统对刷新响应的条件窗口移动后(如下),系统向应用程序发送WM_PAINT消息:用户区移动或显示。用户窗口大小改变。通过滚动条滚动窗口。窗口第一次显示在执行ShowWindow函数后,调用函数UpdateWindow更新绘制客户区,发出WM_PAINT消息,实现重画客户的内容。被覆盖区域的刷新当下例事件发生时,Windows系统将恢复保存的被覆盖区域:下拉式菜单关闭。清除对话框或消息框等对象。被另一个窗口覆盖的区域(
4、称为无效区域),无效区域的产生可导致系统向应用程序发送一条消息。系统为每个窗口建立了一个PAINTSTRUCT结构,该结构变量将记录一个最小矩形(无效区域)的结构RECT,应用程序是无效矩形执行刷新操作。对象穿越后的刷新光标穿过用户区。图标拖过用户区。对象穿越后,Windows自动完成刷新,应用程序不考虑。刷新的常用方法对于简单图形,采用重新绘制图形方法执行刷新。在应用程序中,将图形绘制处理程序放在消息WM_PAINT响应模块中,一旦程序接收到刷新请求即可重绘图形。记录曾发生的事件,在需要刷新时重新调用窗口执行这个事件。位图等复
5、杂图形刷新,是在内存中保持一个显示输出的副本,当需要重绘窗口时,将副本复制到相应的窗口中。4.1.3获取设备环境句柄输出图形必须先获取设备环境句柄(3种方法)1.调用BeginPaint函数获得设备环境句柄如:hdc=BeginPaint(hwnd,&ps);其中:hwnd---访问设备环境的应用程序窗口句柄;&ps----指向变量ps的指针。ps是结构类型PAINTSTRUCT的变量,定义方式为:PAINTSTRUCTps结构类型PAINTSTRUCTWindows系统提供的标识无效区域的结构,在WINDOW.H中定义:typ
6、edefstructtagPAINTSTRUCT{HDChdc;//设备环境句柄BOOLfErase;//确定背景是否被重新绘制,一般取真值,表示擦除无效矩形的背景RECTrcPaint;//无效区域(标识重绘的区)BOOLfRestore;//保留字段BOOLfIncUpdate;//保留字段BYTErgbReserved[16];//保留字段}PAINTSTRUCT;系统调用BeginPaint时,填写ps结构以标识需要刷新的无效区,为实现重绘提供记录。rcPaint为RECT数据结构的变量,标识无效矩形。RECT结构定义:
7、typedefstructtagRECT{LONGleft;//矩形框左上角x坐标LONGtop;//矩形框左上角Y坐标LONGright;//矩形框右上角X坐标LONGbottom;//矩形框右上角Y坐标}RECT;释放设备环境,用EndPaint函数,其原型为:BOOLEndPaint(HWNDhwnd,PAINTSTRUCT&ps)2.调用GetDC函数适应绘图不是由WM_PAINT消息驱动,或对整个客户区及客户区之外进行重画的情况。GetDC函数的原型声明:hdc=GetDC(hwnd);ReleaseDC释放设备环境,
8、函数原型:ReleaseDC(hwnd)。3.调用GetDCEx函数GetDCEx函数返回指向特定窗口的客户区或整个窗口的句柄,是GetDC的扩展。它的释放也是用ReleaseDC函数。4.1.4映射模式(坐标系设置)1.坐标系统与映射模式坐标系:逻辑、设备坐标
此文档下载收益归作者所有