从锁定屏幕返回时 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))*/);
}
我有一个使用 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))*/);
}