我试图在兼容的渲染目标上使用Gdi和Direct 2D渲染一些内容。我使用D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE选项创建兼容目标,然后执行以下操作:
m_pRenderTarget->BeginDraw();
m_pRenderTarget->SetTransform(D2D1::Matrix3x2F::Identity());
m_pRenderTarget->Clear(D2D1::ColorF(D2D1::ColorF::White));
// Direct2D content
D2D1_RECT_F rect1 = D2D1::RectF(50.0f, 50.0f, 200.0f, 100.0f);
m_pRenderTarget->FillRectangle(&rect1, m_pCornflowerBlueBrush);
// GDI content
HDC hDC = NULL;
HRESULT hr = m_pGDIRT->GetDC(D2D1_DC_INITIALIZE_MODE_COPY, &hDC);
::SetBkMode(hDC, TRANSPARENT);
::TextOut(hDC, 30, 50, _T("stackoverflow"), 13);
::TextOut(hDC, 80, 70, _T("stackoverflow"), 13);
::TextOut(hDC, 150, 85, _T("stackoverflow"), 13);
m_pGDIRT->ReleaseDC(NULL);
hr = m_pRenderTarget->EndDraw();
我发现GDI内容没有完全呈现,就像它被Direct2D内容剪辑一样,如下所示:
如果我不打电话" m_pRenderTarget->清除()"方法,GDI内容可以正确呈现,如下所示:
那么我的代码有什么问题,如何正确地将Gdi内容绘制到兼容目标?
答案 0 :(得分:0)
密切关注https://msdn.microsoft.com/en-us/library/windows/desktop/dd370971(v=vs.85).aspx
上的文档和示例代码特别是,您不应该重叠Direct2D和GDI渲染。 EndDraw
之前请致电GetDC
。