从锁定屏幕返回时,Direct2D绘图无法正常工作

时间:2015-01-26 10:27:40

标签: windows mfc direct2d

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

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

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

进入类View构造函数

    // 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

1 个答案:

答案 0 :(得分:0)

非常感谢提示!这是修复它的代码(在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))*/);
}