缓冲绘图时需要注意的地方

一、兼容位图应当依据真实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,不做任何“清屏”动作

posted @ 2018-01-10 22:12  吾非无心  阅读(112)  评论(0编辑  收藏  举报