我有一个使用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
答案 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))*/);
}