设备内容
众所周知,设备上下文是一种包含有关某个设备,如显示器、打印机等的绘制属性信息的WINDOWS数据结构。所有绘制调用都是通过设备上下文对象进行,其中这些对象中包含了画笔,位图,画刷等。设备内容与特定的显示设备相关,对于视讯显示器,设备内容总是与显示器上的特定的窗口相关。
设备内容中的有些值是图形属性,这些属性定义了GDI绘图函数的工作细节,for example,TextOut,设备内容的属性中确定了文字的颜色,文字的背景色,x坐标,Y坐标映射到所要显示区域的方式,还有显示这些文字时系统使用的字体。
当一个程序需要绘图时,首先要取得设备内容句柄,得到此句柄后,Windows用内定的属性填充内部设备内容结构中。绘制完毕之后,必须释放设备内容句柄。
内存设备内容
通过使用一个特别为位图操作的设备环境,可以使得应用程序将输出操作在内存中而不是将其发送到实际的设备中。内存设备环境使得系统将一部分内存当作虚拟设备。它就是一个在内存中的位数组,使得应用程序可以使用它为在一个标准的绘图表面创建位图临时存储颜色数据。由于位图是和设备兼容的,因此内存设备环境在某些时候也就当作兼容设备环境。
内存设备环境作为一个特殊的环境存储位图图像。应用程序可以调用 CreateCompatibleDC 创建一个内存设备环境。
内存设备环境中初始的位图只是一个简单的占位符。它的尺寸为1*1像素。在应用程序进行绘制之前,必须通过调用 SelectObject 选择一个恰当宽度和高度的位图到该内存环境中。要创建一个恰当尺寸的位图,可以使用 CreateBitmap , CreateBitmapIndirect , or CreateCompatibleBitmap 三个函数。当位图被选进内存设备环境后,系统用一个足够大的数组取代单位数组来存储指定的矩形像素的颜色信息。
当应用程序传递一个由 CreateCompatibleDC 返回的句柄到绘制函数时,被要求的输出并不会在设备的绘制表面显示。相反,系统会存储线段,曲线,文字或者区域的颜色信息到位数组中。应用程序可以复制存储在内存中的图像到绘制表面通过调用 BitBlt 函数,并将内存设备环境作为源设备环境,窗口或者屏幕设备环境作为目标设备环境。
例子1: