【发布时间】:2018-08-20 01:22:01
【问题描述】:
我正在尝试在兼容的渲染目标上同时使用 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->Clear()”方法,GDI内容可以正确渲染,如下:
那么我的代码有什么问题,如何正确地将 Gdi 内容绘制到兼容的目标上?
【问题讨论】:
标签: windows interop rendering gdi direct2d