GDI 双缓冲绘图也闪屏

来源:百度知道 编辑:UC知道 时间:2024/06/26 04:32:43
我在WM_PAINT里绘图,用了双缓冲,感觉和没用一样!
给窗口帖一张图片进去,用鼠标拖动调整窗口大小时,这张图片一样闪的厉害。不知道双缓冲起个什么作用?
请GDI高手指点。
case WM_PAINT:
{
HDC hdc = BeginPaint(hwnd,&ps);
FillRect(doubleBuff.back_dc,&doubleBuff.rect,(HBRUSH)GetStockObject(WHITE_BRUSH));

BitBlt(doubleBuff.back_dc,0,0,xPos + IMG_WID, yPos + IMG_HGT,img_dc,0,0,SRCCOPY);

BitBlt(doubleBuff.win_dc,0,0,doubleBuff.rect.right, doubleBuff.rect.bottom,doubleBuff.back_dc,0,0,SRCCOPY);

EndPaint(hwnd,&ps);
return 0;
}

双缓冲当然能起到一定的作用,当刷新速度十分快的时候或者像素点在一定时间
内难以获取还是会出现闪烁.

产生你这个原因的一般有2个原因,要么是你拖动调整窗口大小太频繁,每次拖动
都会造成重绘,还有就是图片太大,图片打了,需要处理的像素点就大了,在很短的时间内,像素点不能完全的显示在内存DC,那么也就不能完全的显示在屏幕DC.

也可能是这2个情况都有.

所以说双缓冲是不能完全克服闪烁的.

你可以用GetClipBox获得一个RECT,这个RECT是本次刷新的RECT,就可以避免整个图片在每次重绘时都再画到界面上了。