文档介绍:图形设备接口与绘图应用
图形设备接口( GDI , Graphics Device Interface )是 windows 系统中的核心模块,它是一个可执行程序( )。
在 windows 应用程序中,图形和文本都是通过 GDI 以图形方式来处理的, GDI 接受了 windows 应用程序的绘图请求后,它会根据设备环境( DC )的设置,将这些请求传给相应的设备驱动程序,从而完成特定硬件的输出。
GDI 之所以能够完成应用程序的绘图请求,是因为它含有在 Windows 应用程序内部可调用的、且与设备无关的图形操作函数,这些函数可产生各种各样的线、正文和位图,它们可以输出到许多不同的输出设备上。
GDI 允许一个应用程序产生画笔、画刷、字体和位图等绘图工具,以供特定的输出操作使用。
Company Logo
设备环境和设备环境类
设备环境( DC , Device context )是 GDI 接口的一个重要组成部分
它实际上是一个数据结构,其内容包括绘图窗口的参数、各种图形和文字属性的当前设定值以及包括当前选择的画笔、画刷等工具属性的跟踪,它们对以后的图形和文字输出命令起到控制作用。
在使用任何 GDI 输出函数之前,程序设计者必须要创建一个设备环境。创建设备环境这只是使用 Windows 提供的许多 GDI 功能的第一步
Company Logo
基于 MFC 的 Windows 编程与以往 Windows 编程不同,它总是选择一个 MFC 类对设备环境进行访问。 MFC 提供了几种不同的设备环境类, CDC 是以下所列设备环境类的基类,它封装了 GDI 的一些图形处理函数。常用的派生类有以下几种:
CClientDC : 绘图区域指窗口的客户区,用来立即响应鼠标事件进行绘图,设备环境的建立和初始化都在鼠标消息对应的处理程序中。
所谓客户区是指窗口区域中除去边框、标题栏、菜单栏或可能有的状态栏、对话栏等以外的部分。坐标( 0 , 0 )通常指客户区的左上角。lientDC 绘图时,通常先调用窗口的 GetClientRect ( )来获取客户区的大小。
Company Logo
CWindowDC :绘图区域指整个显示器,坐标( 0 , o )指整个屏幕的左上角。 CWindowDC 给了程序员很大的自由度,但使用不当也会带来麻烦。使用 CWindowDC 绘图时,通常应先调用 GetwindowRect ( )函数,获取窗自在屏幕坐标系中的外边框坐标。
CPaintDC :绘图区域一般指窗口的客户区,它是利用 WM_PAINT 消息驱动绘图的。利用该类绘图必须要明白 OnPaint ( )和 OnDraw ( )两个函数之间的关系。 OnPaint ( ) 函数是 WM_PAINT 消息的处理函数,设备环境是在该函数中创建的,并且还调用了 OnDraw() 函数,它是应用程序中的视图类的成员函数。通过调用参数把设备环境的指针传递到 OnDraw() 函数中,然后在该函数中进行绘图程序的设计。
总之, CDC 的几种变型各具特点, CClientDC 和 CPaintDC 比较常用。当然还有其他的 MFC 的 DC 类,为特殊目的而设计。
Company Logo
设备环境类 CDC 的功能
设备环境类 CDC 的功能十分丰富,包括了有关绘图的方方面面。从功能上来看, CDC 的功能可以有以下几种:
当前 GDI 绘图对象管理: GDI 绘图对象有位图、画刷、画笔、调色板、字体、区域等,在 MFc 中,它们分别由类 cBitmap 、 cBrush 、 CPen 、 CPalette 、 CFont 和 CRgn 表示。
绘图的效果依赖于这些绘图对象的具体状态。在创建CDC对象时,它包含了这些工具的默认值。如果在绘图前创建新 GDI 对象时,必须要调用 SelectObject ( )函数,以便在设备环境中用新 GDI 对象替代旧对象。此外该函数还可以返回旧对象,以便用新对象完成绘图后再恢复为旧对象。
绘图状态和绘图操作管理:绘图状态一般包括背景色、前景色、线宽、线型、填充模式、裁剪区域、字体、字号等。在 CDC 中可以设置大部分的绘图状态。
Company Logo
MFC 中的绘图操作都封装在 CDC 中,其中有像素操作、画线操作、填充操作、画矩形、画椭圆(圆、弧、扇形)、位图操作,另外还有区域的运算及操作、路径操作和字符显示等。使用 MFC 编程,常常需要调用各种绘图操作。
GDI 对象的分类
与绘图相关的 GDI 对象类主要包括 CPen 类、 CBrush 类、 CFont 类、 CRgn 类、 CPalette 类、 CBitmap 类,它们