这个很好理解,前面,我们设备环境是屏幕,直接画在屏幕上;现在,我们的设备环境是位图,
直接画在位图上,然后再显示在屏幕上,显示出来同样的效果。
-
设备环境:
所有绘画函数的操作对象都是“设备环境”,对位图操作也不例外。为了对位图使用GDI函数,需要使用 CreateCompatibleDC函数为位图建立一个DC,然后使用 SelectObject 函数将位图选入这个DC中,这样,所有对这个DC的绘图操作实际上就是在操作这个位图。每一个操作的位图都需要单独为他创建一个DC。 -
创建时间:
程序中常常使用在资源中预定义的位图,但也有使用未初始化的位图的情况,如例子程序中的位图和时钟位图一开始就是未初始化的,它们是程序开始运行后才被创建的。 -
建立未初始化的位图 函数:
- 创建一个位图需要的参数是高度、宽度以及颜色深度,要创建位图必须得知这些参数。使用 CreateCompatibleBitmap创建位图的时候,参数中有一个hDC,这是个参考hDC,也就是说,新位图的颜色深度和 hDC 对应的“设备环境”的颜色深度相同(注意:有个 hDC 参数的意识并不是将创建的位图选入这个 hDC)
- CreateBitmap 函数则是直接在参数 dwPlanes 和 dwBitsPerPel 中指定了颜色的深度。两个函数的 dwWidth, dwHeight 参数指定了创建的位图的宽度和高度。
-
使用例子:
- 例子程序的 _CreateBackGround 子程序中,为了建立背景图片和时钟图片,需要建立两个未初始化的位图及它们的DC,所以程序一开始用 GetDC 函数获取主窗口的 hDC 来当做参考 DC,然后用CreateCompatibleDC 函数建立两个DC(句柄放在全局变量 hDcBack 和 hDcClock中),并用 CreateCompatibleBitmap 建立两个位图(句柄放入hBmpBack 和 hBmpClock中),接下来用 SeletObject 将这个两个位图选入新建的hDC中。
- 创建背景图片的过程中还要用到资源中的背景图片、边框图片和边框的遮掩图片,对于这些图片,程序用 LoadBitmap 函数状如,并使用 CreateCompatibleDC 为每一个图建立一个DC。
- 对于不在使用的位图,要用 DeleteObject 函数将他们删除。所以在子程序的最后,使用 DeleteObject 函数将临时使用的位图句柄删除,并使用 DeleteDC 将操作这些位图的hDC删除。
-
注意:
操作未初始化的位图需要用到 CreateCompatibleDC 和 CreateCompatibleBitmap 函数,初学者常常犯的错误使用 CreateCompatibleDC 返回的 HDC 当做 CreateCompatibleBitmap 函数的参考 hDC,这样的结果所使用的位图都是单色的,正确的做法是两个函数的参考 hDC 都使用 窗口客户区的 hDC。