从锁定屏幕返回时 Direct2D 绘图不工作

Direct2D drawing not working when returning from lock screen

我有一个使用 Direct2D 可以正常工作的 MFC 应用程序...除了一件事:当我在应用程序运行时锁定我的计算机 (Windows) 时,在我解锁计算机时不再刷新显示.

请注意,该应用程序正在正常运行,只需调整应用程序的大小即可使其再次运行。

这是我的代码的主要部分:

进入class视图构造函数

    // Enable D2D support for this window:
    EnableD2DSupport();

以及绘图部分

afx_msg LRESULT CMyView::OnDraw2d(WPARAM wParam, LPARAM lParam)
{
    CHwndRenderTarget* pRenderTarget = (CHwndRenderTarget*)lParam;
    ASSERT_VALID(pRenderTarget);
    if (pRenderTarget == NULL)
        return -1;

    pRenderTarget->FillRectangle(m_rect, m_pLinearGradientBrush);
    ...

我的应用程序基于此示例,其中既不包含 BeginDraw 也不包含 EndDraw : https://code.msdn.microsoft.com/windowsdesktop/MFC-Direct2D-Hello-World-9aa6ae00

感谢 IInspectable 的提示!这是为我修复它的代码(在 CMyView::OnDraw2d 的末尾)。

...
hr = pRenderTarget->EndDraw();
if (FAILED(hr))
{
  pRenderTarget->ReCreate(m_hWnd);
  delete m_pTraceRenderTarget;
  m_pTraceRenderTarget = NULL;
}

对于正常情况,我猜 pRenderTarget->ReCreate(m_hWnd);打电话应该够了。但就我而言,它不起作用,因为我拥有第二个 CompatibleRenderTarget。通过释放它,我强制它稍后在我的代码中重新创建:

if (m_pTraceRenderTarget == NULL)
{
    m_pTraceRenderTarget = new(CBitmapRenderTarget);
    pRenderTarget->CreateCompatibleRenderTarget(*m_pTraceRenderTarget/*, CD2DSizeF((100.0), (100.0))*/);
}