gpt4 book ai didi

c++ - 为什么不手动发送 WM_PAINT

转载 作者:太空狗 更新时间:2023-10-29 23:33:06 31 4
gpt4 key购买 nike

我读到我永远不应该手动发送 WM_PAINT 并且应该调用 InvalidateRect 但没有找到任何关于为什么不这样做的信息。那为什么不呢?

update 适用于 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备注部分:

The update region is set by the InvalidateRect or InvalidateRgn function and by the system after sizing, moving, creating, scrolling, or any other operation that affects the client area.

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

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

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

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com