WindowsGDI的接口没提供这样的功能机制,只能是先通过CreateCompatibleDC 创建一个与显示器设备内容兼容的内存设备内容,用SelectObject将位图选入内存设备内容,再用BitBlt函数进行从内存到显存的位块传输。 DC是设备内容,是我们问题的核心,请看《Windows程序设计》关于设备内容的讲解: 设备内容: 设备内容中包含许多确定GDI函数如何在设备上工作的目前「属性」,这些属性允许传递给GDI函数的参数只包含起始坐标或者尺寸信息,而不必包含Windows在设备上显示对象时需要的所有其它信息。例如,呼叫TextOut时,您只需要在函数中给出设备内容句柄、起始坐标、文字和文字的长度。您不必指定字体、文字颜色、文字后面的背景色彩以及字符间距,因为这些属性都是设备内容的一部分。当您想改变这些属性之一时,您呼叫一个可以改变设备内容中属性的函数,以后针对该设备内容的TextOut呼叫来使用改变后的属性。 内存设备内容: 设备内容指的是特殊的图形输出设备(例如显示器或者打印机)及其设备驱动程序。而内存设备内容只位于内存中,它不是真正的图形输出设备,但可以说与指定的真正设备「兼容」。也就是说内存设备内容具有和显示器设备内容相同的结构,也存放与屏幕显示相关的信息。 另外书中还说:内存设备内容是您可以选进位图的唯一一种设备内容型态。也就是说,我们不能够调用SelectObject(显示器设备内容句柄, 位图句柄)直接将位图选入显示器设备内容。
CreateCompatibleDC工作原理,布布扣,bubuko.com
原文:http://blog.csdn.net/ghevinn/article/details/28642323