2

我有一个使用 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;
}
4

1 回答 1

4

我的猜测是您没有在您的绘图处理程序中验证窗口

应用程序必须调用 BeginPaint 和 EndPaint 以响应 WM_PAINT 消息,或将消息传递给 DefWindowProc 函数以验证窗口。DefWindowProc 验证更新区域;如果需要擦除窗口背景,它可以发送 WM_ERASEBKGND 消息。

这意味着操作系统会认为窗口仍然需要绘制,并再次调用您。

于 2009-07-13T02:57:38.823 回答