从STRG-ALT-ENTF返回后冻结的Windows MFC SDI应用程序的客户端区域

从STRG-ALT-ENTF返回后冻结的Windows MFC SDI应用程序的客户端区域,mfc,direct2d,sdi,Mfc,Direct2d,Sdi,我正在使用Visual Studio 2017,我已经使用Direct2D创建了一个用于绘图的MFC SDI应用程序。 所以我在听 ON_REGISTERED_MESSAGE(AFX_WM_DRAW2D, &CIGUIDEView::OnDraw2d) 用于绘制到应用程序客户端区域的消息。一切正常,直到我点击STRG-ALT-ENTF并从windows锁定屏幕返回。然后,客户端区域被“冻结”,即它不刷新。然而,应用程序本身仍然具有响应能力。当我在中设置断点时 OnDraw2d(WPAR

我正在使用Visual Studio 2017,我已经使用Direct2D创建了一个用于绘图的MFC SDI应用程序。 所以我在听

ON_REGISTERED_MESSAGE(AFX_WM_DRAW2D, &CIGUIDEView::OnDraw2d)
用于绘制到应用程序客户端区域的消息。一切正常,直到我点击STRG-ALT-ENTF并从windows锁定屏幕返回。然后,客户端区域被“冻结”,即它不刷新。然而,应用程序本身仍然具有响应能力。当我在中设置断点时

OnDraw2d(WPARAM WPARAM,LPARAM LPARAM){..}

VisualStudio中断,因此很明显,所有绘图实际上都应该发生。但是,应用程序如下所示:

有趣的是,当我点击STRG-ALT-ENTF时,只有当鼠标指针在客户端区域内时才会发生这种情况。如果它在外面,就没有问题

这是一个错误还是我遗漏了什么

问候,,
迈克尔

你可能没能做到。如果没有答案,你不能期待比猜测更重要的东西。请阅读。我读到MFC Direct2D包装类负责设备丢失。无论如何,我将尝试提供一个最小的可复制示例。未能提供最小的可复制示例,我找到了原因:在前面提到的绘图操作中,我使用了一个无效的CD2DPathGeometry对象。所以,正如你提到的,这毕竟是由于设备丢失。解决方案是将D2DERR_RECREATE_TARGET事件捕获为m_renderTarget.EndDraw()的HRESULT;并手动重新创建已失效的对象。