本文主要介绍CreateCompatibleDC()函数的用例的详细说明。本文通过一个简单的案例来说明对这项技术的理解和使用。以下是详细内容,有需要的朋友可以参考一下。
函数:这个函数创建一个与指定设备兼容的内存设备上下文环境(DC)。
原型:HDC CreateCompatibleDC(HDC HDC););
参数:
Hdc:现有设备上下文的句柄。如果句柄为空,此函数创建一个与应用程序的当前显示兼容的内存设备上下文。
返回值:如果成功,返回内存设备上下文环境的句柄;如果失败,返回值为NULL。
CreateCompatibleDc函数仅适用于支持光栅操作的设备。应用程序可以通过调用GetDeviceCaps函数来确定设备是否支持这些操作。
当不再需要内存设备上下文时,可以调用DeleteDc函数来删除它。
如果使用双缓冲,就必须定义另一个位图对象。然后,使用CreateCompatibleBitmap创建一个与屏幕显示兼容的位图,然后使用SelectObject将该位图选择到内存显示设备中。不知道是不是这样。
先给出实现方案,再解释,也是OnDraw(CDC *pDC):
CDC MemDC//首先定义一个显示设备对象
CBitmap MemBitmap//定义位图对象
//然后建立一个兼容屏幕显示的内存显示设备。
MemDC。CreateCompatibleDC(NULL);
//这个时候不能画,因为没地方画了_
//在下面设置一个与屏幕显示兼容的位图。至于位图的大小,可以使用窗口的大小,也可以自己定义(比如有滚动条的话,应该比当前窗口的大小大,在BitBlt中决定把内存的哪一部分复制到屏幕上)
MemBitmap。CreateCompatibleBitmap(pDC,nWidth,n height);
//选择位图到内存显示设备。
//只有选择了位图的内存显示设备才有位置在指定的位图上绘制。
CBitmap *pOldBit=MemDC。select object(membit map);
//先用背景色清空位图,这里我用白色做背景。
//你也可以使用你应该使用的颜色。
MemDC。FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255));
//绘图
MemDC。move to(……);
MemDC。line to(……);
//将内存中的图表复制到屏幕上显示
pDC-BitBlt(0,0,nWidth,nHeight,MemDC,0,0,src copy);
//绘制完成后清理
MemBitmap。delete object();
MemDC。DeleteDC();
Gdi应该是sdk里很重要的东西,但是我的水平真的不够好。我已经很久没有意识到CreateCompatibledc的用途了,但幸运的是,在知道这个东西的200天内,我终于知道了这个函数或者说内存dc的意义。
在这种情况下,如果你想在屏幕上进行更多的gdi函数操作,而如果每一步操作都直接在屏幕dc上操作,那么大部分的可能性都是屏幕闪烁。一个好的解决方案是使用内存dc。所有这些操作都是先在内存dc上操作,然后依次在屏幕上操作。
比如你只是用bitblt在屏幕上复制一张图片,就可以直接用屏幕的dc。但如果要先设置背景(fillrect),再设置bitblt,这就涉及到两个屏幕dc的操作,这样屏幕容易闪烁。
本文对CreateCompatibleDC()函数的详细说明到此为止。有关CreateCompatibleDC()函数的更多信息,请搜索我们以前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!