相信设备上下文 (DC, Device Context) 对你来说,应该很熟悉。
基本工作方式是,你可以通过调用 SelectObject 来将画笔(Pen),画刷(Brush),字体(Font)和位图(Bitmap)等这些对象选入设备上下文中,但是,这里的位图对象,相对其他 GDI 对象,有一点特殊。
此话怎讲?
因为,如果你仔细观察下上面说的这些对象,只有位图是可修改的(Modifiable)。
画笔,画刷和字体在它们创建之后都是不能再修改了。
但位图就不一样了:在 DC 中选择的位图会随着你绘制到其中而发生更改。
如果将这个位图选入到多个 DC,这意味着:从一个 DC 写入位图会秘密地在另一个 DC 中更改它,这对 DC 来说不是一件好事。
所以,让我们看看,你可以选择画笔,画刷和字体到多个 DC 中,但不能使用位图执行此操作。你觉得这个是巧合吗?你再细品一下。
有图为证,如下:
总结
本文的核心观点是:应用程序不能一次将单个位图选择到多个 DC 中。
GDI 这套图形绘制引擎,相对于新出来的 DirectX 来说,属实有点老了。
但廉颇虽老,但还是行的。
最后
Raymond Chen的《The Old New Thing》是我非常喜欢的博客之一,里面有很多关于Windows的小知识,对于广大Windows平台开发者来说,确实十分有帮助。
本文来自:《What’s so special about bitmaps and DCs?》