我有一个使用CAtlExeModuleT的非常简单的Win32应用程序。该模块仅创建从CWindowImpl派生的CTestWindow类。它只有一个用于WM_PAINT的消息处理程序。创建窗口并将其显示后,将无限调用OnPaint方法(WM_PAINT消息),从而消耗100%的CPU。
创建窗口的代码非常简单:
m_pMainWnd = new CTestWindow();
if(NULL == m_pMainWnd->Create(NULL, CWindow::rcDefault, _T("Test Window"), WS_OVERLAPPEDWINDOW, 0, hMenu)){
DWORD dwErr = GetLastError();
return E_FAIL;
}
m_pMainWnd->ShowWindow(nShowCmd);
OnPaint消息处理程序也非常简单(它不执行任何操作):
LRESULT CTestWindow::OnPaint(UINT /*uMsg*/, WPARAM /*wParam*/, LPARAM /*lParam*/, BOOL& /*bHandled*/)
{
// TODO: Add your message handler code here and/or call default
return 0;
}
最佳答案
我的猜测是您不是validating the window in your paint handler。
这意味着操作系统将认为仍然需要绘制窗口,然后再次致电给您。
关于windows - 永不结束与ATL CWindowImpl的WM_PAINT循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1117511/