我的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%。 如果我不做任何事情,为什么会这么高呢。
答案 0 :(得分:6)
当窗口的更改改变了客户区的内容时,系统会将此消息发送到窗口过程。
系统保留内部更新区域以确定窗口的任何部分是否需要绘画。然后,应用程序有责任验证其绘制的区域(通过调用BeginPaint,ValidateRect或ValidateRgn)。
如果无法验证不再需要更新的区域,系统将重新生成WM_PAINT
消息。这导致您观察到的资源消耗。