Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mfc 理解设备上下文_Mfc_Gdi - Fatal编程技术网

Mfc 理解设备上下文

Mfc 理解设备上下文,mfc,gdi,Mfc,Gdi,作为MFC的新手,我经常看到设备上下文(DC)。我模模糊糊地理解这与绘画有关,但具体细节在我能找到的任何地方都没有很好地解释。创建“兼容设备上下文”意味着什么?为什么它很重要?SelectObject的作用是什么?我必须如何首先使DC兼容?设备上下文只是一个绘图的地方,因此如果您有两个不同的DC,您就在两个不同的地方绘图。有点像文件句柄 设备上下文可以指屏幕上的不动产,也可以指仅驻留在内存中的位图,也可以指其他地方,这正是我目前能想到的两个地方 兼容上下文是指具有相同底层像素组织的上下文,即每像

作为MFC的新手,我经常看到设备上下文(DC)。我模模糊糊地理解这与绘画有关,但具体细节在我能找到的任何地方都没有很好地解释。创建“兼容设备上下文”意味着什么?为什么它很重要?SelectObject的作用是什么?我必须如何首先使DC兼容?

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

设备上下文可以指屏幕上的不动产,也可以指仅驻留在内存中的位图,也可以指其他地方,这正是我目前能想到的两个地方

兼容上下文是指具有相同底层像素组织的上下文,即每像素位数、每像素字节数、颜色组织等。内存位图设备上下文可以有您想要的任何组织,但您的屏幕上下文(最终)将与图形卡上的缓冲区相关,而图形卡上的缓冲区(取决于模式等)将有一个非常特定的像素组织

具有兼容的上下文意味着在它们之间传输图像数据是有效的,因为几乎不需要或不需要对数据进行翻译。在另一个极端,如果你有一个256色的调色板,8位的贴图,并且你试图将它blit到一个每个像素有8位RGBA的屏幕上,每一个像素在被复制时都需要大量的按摩,因此复制不兼容的位图的速度要慢得多。根据Win32 SDK文档,至少BitBlt()和StretchBlt()可以“转换源颜色格式以匹配目标格式”,这样就可以完成

研究CreateCompatibleDC()和CreateCompatibleBitmap()作为如何创建与现有图形上下文兼容的图形上下文的起点


SelectObject()控制设备上下文中当前活动的资源。上下文具有当前笔、画笔、字体和位图。通过允许您指定更少的参数,这使得许多其他GDI调用更加简单。例如,使用TextOut()时不必指定字体,但如果要更改字体,则可以使用SelectObject()。如果为字体提供SelectObject()句柄,则返回值是有效字体的句柄,后续操作将使用新字体。其他种类的资源、钢笔、画笔等的行为也一样。

谢谢!接下来的问题是:您是否可以使用不兼容的DCs,并且仍然有一个工作程序(尽管速度要慢得多)?SelectObject从何而来的设备上下文兼容性的概念?这对我理解那些我难以理解的概念非常有帮助。非常感谢你。