作为MFC的相对新来者,我经常看到设备上下文(DCS)。我隐约了解这与绘画有关,但是在我能找到的任何地方,这些细节都没有很好地解释。创建“兼容设备上下文”是什么意思,为什么重要? SelectObject做什么,我必须先制作DC兼容?

有帮助吗?

解决方案

设备上下文只是绘图发生的一个地方,因此,如果您有两个不同的DC,则在两个不同的位置绘制。有点像文件句柄。

设备上下文可以参考屏幕上的房地产,也可以指向仅存在内存中的位图,也可能是其他地方,这些只是我目前能想到的两个。

兼容的上下文是具有相同基础像素组织的上下文,这意味着每个像素,每个像素,颜色组织等。内存位图设备上下文可以具有您想要的任何组织,但是您的屏幕上下文将与图形卡上的缓冲区相关联,该屏幕卡将(取决于模式等)具有非常特定的像素组织。

具有兼容的上下文意味着其在它们之间传输图像数据的有效效率,因为几乎不需要数据翻译。在另一个极端情况下,如果您有256个调色板,8位地图,然后尝试将其闪烁到每个像素中每个像素中有8位RGBA的屏幕,则每个最后一个像素都需要进行大量按摩,因为它被复制并复制不相容位图要慢得多。根据WIN32 SDK文档,至少BitBlt()和strendblt()“转换源颜色格式以匹配目标格式”,因此可以完成。

调查CreateCompatibledc()和CreateCompatibleBitMap()作为如何创建与已经存在的绘图上下文的开始点。

selectObject()控制设备上下文中哪些资源当前处于活动状态。上下文具有当前的笔,刷子,字体和位图。通过允许您更少的参数来使其他GDI调用更简单。例如,您不必在使用textout()时指定字体值是有效的字体的手柄,随后的操作使用新字体。对于其他种类的资源,笔,刷子等,行为是相同的。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top