我读过我不应该手动发送 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 评论部分:



因此,如果您手动发送 BeginPaintWM_PAINT 可能无法正常工作。

可能还有更多原因/惊喜。

关于c++ - 为什么不手动发送 WM_PAINT,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22438365/

10-11 22:41