WM_PAINT返回0导致cpu使用率2%

时间:2018-03-10 12:33:09

标签: c++ windows winapi

我的WM_Paint

有问题

如果我让它返回0/1,即使程序被最小化,它也会使我的cpu保持在1%左右。

我的绘画窗口正在使用OpenGL

如果我从WM_PAINT中断,则在调整大小时会导致绘图。

case WM_PAINT:
{
    application->paint_window();
    return 0;
}

window = std::make_unique<platform::window>(
    L"Main window",
    CW_USEDEFAULT, CW_USEDEFAULT,
    1200, 600,
    WS_OVERLAPPEDWINDOW /*| WS_CLIPSIBLINGS | WS_CLIPCHILDREN*/, 0,
    CS_OWNDC,
    this, process_message
);

while (::GetMessage(&msg, 0, 0, 0) > 0)
{
    if (!::TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
    {
        ::TranslateMessage(&msg);
        ::DispatchMessage(&msg);
    }
}

编辑: 如果我在WM_PAINT中删除我的函数调用,我的cpu上升到15%。 如果我不做任何事情,为什么会这么高呢。

1 个答案:

答案 0 :(得分:6)

正如the WM_PAINT message

所述
  

当窗口的更改改变了客户区的内容时,系统会将此消息发送到窗口过程。

系统保留内部更新区域以确定窗口的任何部分是否需要绘画。然后,应用程序有责任验证其绘制的区域(通过调用BeginPaintValidateRectValidateRgn)。

如果无法验证不再需要更新的区域,系统将重新生成WM_PAINT消息。这导致您观察到的资源消耗。