【发布时间】:2015-11-13 18:15:10
【问题描述】:
BeginPaint() 文档说:
如果窗口的类有背景画笔,BeginPaint 会使用它 在返回之前刷掉更新区域的背景。
我已经这样设置画笔了:
wc.hbrBackground = (HBRUSH)(COLOR_BTNFACE+1);
我在我的 Window 上绘制了一个位图,然后我要求使用以下代码重绘:
RedrawWindow(hWnd, 0, 0, RDW_INVALIDATE | RDW_UPDATENOW);
我在WM_PAINT 中有此代码:
case WM_PAINT:
{
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
EndPaint(hWnd, &ps);
}
break;
所以我预计BeginPaint() 会擦除位图,但位图仍保留在窗口上!
我使用的是 Windows 7。
【问题讨论】:
-
您需要添加
RDW_ERASE标志才能清除背景。 -
@Jonathan Potter 它有效,但现在是
RedrawWindow()正在擦除背景,而不是BeginPaint()。 -
不,不是。
RedrawWindow将该区域标记为需要擦除。 -
@Jonathan Potter 但是我删除了
WM_PAINT里面的代码,背景也被抹掉了。 -
如果您不处理
WM_ERASEBKGND并让它通过DefWindowProc擦除将在那里完成。