当前位置:C++技术网 > 资讯 > windows设备描述表DC的深入理解学习

windows设备描述表DC的深入理解学习

更新时间:2016-04-13 17:46:59浏览次数:1+次

设备描述表,简称为"DC",实际上是GDI-图形设备接口,内部保存的数据结构。关于设备描述表的定义,给出的定义是“设备描述表指的是某个图形输出设备(例如视频显示器与打印机),及其设备驱动程序”。事实上设备描述表的诞生是为了兼容各种显示设备,隔离程序员与硬件,windows中的所有显示操作都是同设备描述表打交道。在窗口的客户区域显示文本和图形需要设备描述表句柄。当我们想在一个图像输出设备上绘图的时候,我们首先需要获得一个设备描述表即DC的句柄。将句柄返回给程序时,windows就给了我们使用设备的权限。然后,我们在GDI中将这个句柄作为一个参数,向windows标识我们想在其上进行绘图的设备。
当程序需要绘图时,它必须先获取设备描述表句柄。在获取了该句柄后,Windows 用默认的属性值填充内部设备描述表结构。
可以通过调用不同的 GDI 函数改变这些默认值。
利用其它的 GDI 函数可以获取这些属性的当前值。
还有其它的 GDI 函数能够在窗口的客户区真正地绘图。

当程序在客户区绘图完毕后,它必须释放设备描述表句柄。句柄被释放后就不再有效,且不能再被使用。

程序必须在处理单个消息期间获取和释放句柄。

表2-2列出了设备描述表的结构和各项缺省值,表2-3列出了设备描述表的类型,表2-4显示设备描述表的类型。

上图中:
Common设备描述表通过::GetDC,::GetDCEx,::BeginPaint来获得一个设备描述表,用毕,用::ReleaseDC或::EndPaint释放设备描述表;
Printer设备描述表通过::CreateDC创建设备描述表,用::DeleteDC删除设备描述表。
Memory设备描述表通过::CreateCompatibleDC创建设备描述表,用::DeleteDC删除。
Information设备描述表通过::CreateIC创建设备描述表,用::DeleteDC删除。

这也就是我们有时候要调用函数CreateCompatibleDC函数来创建兼容的DC,这是为了"照料"内存设备描述表!
严格来讲,设备描述表应该专指内存中的HDC句柄对应的DC结构体。
设备描述表结构的核心是位图。为什么这样说呢?我们说了设备描述表时为了兼容各种显示设备,这样对不同的显示器,设备描述表的结构是不一样的,结合内存设备描述表结构,我们可以可以知道内存设备描述表中包含的位图结构对应于实际硬件显卡的结构
如显卡支持分辨率为:1024*768,深度为32位,位面数为1
那么对应的设备描述表结构中的位图结构大小为:1024*768,深度为32位,位面数为1,每个像素点数据对应于显卡中数据区的像素点。这样在显示操作时实际上是操作DC对应的位图结构,位图结构在对应于相关显卡数据区,达到了屏蔽硬件差异性的效果。当我们使用SDK函数Bitblt最能感受到这一点。
对于256色显示,Windows还支持调色板操作,这个DC下的调色板对应于实际显卡的调色板,原理是一样的。
至于DC下的HPEN、HBRUSH和HFONT只是软件是为显示操作而构建的辅助工具。

其实对于设备描述表,更多的还是需要我们对windows操作系统的硬件比较熟悉。关于表的部分是转自《关于设备描述表