缓冲绘图时需要注意的地方
一、兼容位图应当依据真实DC创建,不能依据刚建的内存DC来
CDC* pDC( 可以是传入的DC,也可以是屏幕DC,可以是CClientDC....)
CDC dcMemory;
dcMemory.CreateCompatibleDC(pDC);
CBitmap bmp;
bmp.CreateCompatibleBitmap(pDC,w,h);//这是对的,
bmp.CreateCompatibleBitmap(&dcMemory,w,h);//这个也能过,但 但 但 只有黑白2色!!
...
二、窗口大小改变后要修改对应的Bitmap
即是说,内存DC也是有“窗口大小”的,大小=对应的Bitmap的大小
dcMemory.SelectObject(&bmp);
....
XXX::OnSize(...)
{
bmp.CreateCompatibalBitmap(pDC,newWidth,newHeight);
dcMemory.SelectObject(&bmp);
}
三、使用了内存DC还闪烁的问题
虽然在OnPaint 中一次性将内存DC中的图形Copy到显示DC,但由于在此之前,系统默认调用的CBase::OnEraseBkgnd(pDC),这个东西会“清屏”,所以快速OnPait时会闪烁。
因此,如果在OnPait中处理,就需要屏蔽OnEraseBkgrnd——在该函数内直接return TRUE,不做任何“清屏”动作