【发布时间】:2015-03-24 18:17:54
【问题描述】:
我有一个使用 Direct2D 可以正常工作的 MFC 应用程序...除了一件事:当我在应用程序运行时锁定我的计算机 (Windows) 时,当我解锁计算机时,显示器不再刷新。
请注意,应用程序运行正常,只需调整应用程序的大小即可使其再次运行。
这是我的代码的主要部分:
进入类视图构造函数
// 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
【问题讨论】:
-
您是否正确检查了ID2D1RenderTarget::EndDraw 的返回值?如果它返回
D2DERR_RECREATE_TARGET,你将不得不重新创建你的渲染目标。还要确保您有一个WM_DISPLAYCHANGE消息处理程序,该处理程序可以触发呈现/重新创建,如Creating a Simple Direct2D Application 所述。 -
感谢您的反馈。我根本没有调用 EndDraw()。现在我添加了这个调用,只要按下 CTRL-ALT-DEL,我就会得到一个返回码:0x8899000c。我试图调用 ReCreate() 但这似乎不是解决它的正确方法。 hr = pRenderTarget->EndDraw(); if (FAILED(hr)) pRenderTarget->ReCreate(m_hWnd);