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

ciy*_*aso -2 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);
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:如果我在WM_PAINT中删除我的函数调用,我的CPU增加到15%.如果我什么都不做,为什么会这么高呢?

IIn*_*ble 6

WM_PAINT消息所述:

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

系统保持内部更新区域以确定窗口的任何部分是否需要绘画.然后应用程序负责验证它绘制的区域(通过调用BeginPaint,ValidateRectValidateRgn).

未能验证不再需要更新的区域将使系统重新生成WM_PAINT消息.这会导致您观察到的资源消耗.