用 StretchBlt 缩放位图显示的刷新的问题
用 StretchBlt 来缩小一个位图, 该位图的图像是变化的, 然后, 处理 WM_PAINT 消息, 处理位图的图像变化, 大概过程如下:
// 在整个客户区画 1024 * 768, 位图大小是 1280 * 1024 , 一直变化
// 先刷新
//RECT r;
//r.left = r.top = 0;
//r.right = 1024;
//r.bottom = 768;
//InvalidateRect(hWnd, &r, false);
PAINTSTRUCT ps;
HDC paintDC = BeginPaint(hWnd, &ps);
.
.
// bitmapDC 为已经 Select 好位图的 HDC
SetStretchBltMode(paintDC, HALFTONE);
if (!StretchBlt(paintDC, 0, 0, 1024, 768, bitmapDC, 0, 0, 1280, 1024, SRCCOPY))
throw Exception("fail to stretchblt, check");
.
.
EndPaint(hWnd, &ps);
问题: 如果一开始不 InvalidateRect, 则会出现刷新的问题, 即客户区显示总是会有很多未刷新的区域, 超难看, 无论 StretchBlt 的区域是 ps 区域还是全区域; 但是, 如果区域不缩放, 即只选择 bitmapDC 的 1024 * 768 部分, 比例为 1 : 1, 则刷新很正常; 如果用 InvalidateRect, 很明显, CPU 会上升, 而且很厉害, 无论位图是否有变化;