我读过我不应该手动发送 WM_PAINT
而应该调用 InvalidateRect
但是没有找到任何关于为什么不发送的信息。那为什么不呢?
更新 适用于 InvalidateRect
但不适用于 SendMessage(WM_PAINT)
LRESULT CALLBACK window_proc(HWND wnd, UINT msg, WPARAM w_param, LPARAM l_param)
{
switch (msg)
{
case WM_PAINT:
PAINTSTRUCT ps;
HDC hdc = BeginPaint(wnd, &ps);
Polyline(..);
EndPaint(wnd, &ps);
return 0;
case WM_USER:
// SendMessage(wnd, WM_PAINT, NULL, NULL);
// InvalidateRect(wnd, NULL, FALSE);
return 0;
}
}
最佳答案
WM_PAINT
的官方文档指出您不应该在备注部分的第一句话中。说真的,这应该足以成为不这样做的理由。
至于技术原因,我想这是其中之一,摘自 BeginPaint
评论部分:
因此,如果您手动发送 BeginPaint
,WM_PAINT
可能无法正常工作。
可能还有更多原因/惊喜。
关于c++ - 为什么不手动发送 WM_PAINT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22438365/