请教 兼容DC的作用是什么

请问 兼容DC的作用是什么?
在窗口中显示位图,步骤如下:
1、创建位图
CBitmap bitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
BITMAP bmp;
bitmap.GetBitmap(&bmp);
2、创建兼容DC

CDC dcCompatible;
dcCompatible.CreateCompatibleDC(pDC);
3、将位图选入兼容DC
dcCompatible.SelectObject(&bitmap);

CRect rect;
GetClientRect(&rect);

4、将兼容DC中的位图贴到当前DC中
pDC->BitBlt(0,0,rect.Width(),rect.Height(),&dcCompatible,0,0,SRCCOPY);

请用以上过程中,兼容DC是不是可以省掉,直接将位图选入当前DC,那不就用不着兼容DC了吗?

我刚学,实在是不明白,谢谢大家。

2、创建兼容DC
------解决思路----------------------
你说的兼容DC应该是内存DC,使用的原因是可以防止绘图时的屏幕抖动,深入学习后应该会明白的,这种方法也就是所谓的“双缓冲”。
------解决思路----------------------
如果你直接在pDC上画很多线或者文字或者图片,那么你的显示区域就会闪动。

闪动的原因是因为你的程序执行有先后,先画一个再画一个,少的时候不影响,当数据大时候就会非常明显。

内存DC就很好的解决了这个问题,你所把有图形都画在内存DC上,再最后一起贴到pDC上,就不会闪了。

这就是是所谓的双缓存。
------解决思路----------------------
引用:
打错了,这里只有一个图片,还需要用内存DC吗? 


最好是用,无论是从习惯还后是期延伸来说都有必要。
------解决思路----------------------
兼容DC也叫内存DC,就是内存中的一段buf,你可以理解这段buf是给显卡用的数据。

这里用到的是双缓存绘图技术,为了避免频繁绘图导致屏幕闪烁:根据源设备DC创建一个兼容DC,并在这个DC(实际上是兼容位图)上把绘图操作全部绘制完,然后再一次性拷贝到源设备DC上。

之所以这样做会避免频繁绘图导致屏幕闪烁,你可以这样理解:点、线、面 操作的效率是不一样的,点操作效率最低,面操作效率最高。绘图操作实际上就是逐个点连成线,逐个线构成面;如果不使用内存DC,而是在源DC(实际上就是显示器)上一点一点的绘制,每个绘制点结束势必会造成显示器刷新,而显示器跟不上绘制节奏就导致闪屏的出现。

所以,我们先把所有的绘制操作在内存中进行,这个过程中跟屏幕没有半毛钱的关系,当内存DC绘制完之后,把内存DC一气呵(面操作)成拷贝到源DC上,相当于仅有一次绘图操作,那即使你的CPU再烂,一次操作应该是没问题的吧——也就避免了屏幕刷新闪烁了

------解决思路----------------------
简单理解那就是双缓冲。。。
------解决思路----------------------
引用:
打错了,这里只有一个图片,还需要用内存DC吗? 


一定要用内存DC的,这是硬性规定,更是良好的编程习惯!

绘图实际上是在DC中的位图上来绘制的,这个位图一般情况下是调用CreateCompatibleBitmap创建的兼容位图,也可以是你LoadBitmap生成的位图(使用现有的背景图片)