我有一个使用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/

10-13 08:15