我正在尝试在兼容的渲染目标上同时使用 Gdi 和 Direct 2D 渲染位图。我使用 D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE 选项创建兼容目标,然后执行以下操作:
HDC hdc=NULL;
ID2D1GdiInteropRenderTarget *gdiTarget=NULL;
target->QueryInterface(__uuidof(ID2D1GdiInteropRenderTarget), (void**)&gdiTarget);
target.BeginDraw();
HRESULT hr=gdiTarget->GetDC(D2D1_DC_INITIALIZE_MODE_CLEAR, &hdc);
if(SUCCEEDED(hr))
{
/* Gdi drawing code(hdc)*/
gdiTarget->ReleaseDC(NULL);
}
/* Direct2D drawing code
target->EndDraw();
gdiTarget->Release();
但似乎出了点问题,因为每次我调用这个渲染方法我都会得到很多 GDI 对象泄漏。我也尝试这样做:
HDC hdc=NULL;
ID2D1GdiInteropRenderTarget *gdiTarget=NULL;
target->QueryInterface(__uuidof(ID2D1GdiInteropRenderTarget), (void**)&gdiTarget);
target.BeginDraw();
HRESULT hr=gdiTarget->GetDC(D2D1_DC_INITIALIZE_MODE_CLEAR, &hdc);
if(SUCCEEDED(hr))
gdiTarget->ReleaseDC(NULL);
target->EndDraw();
gdiTarget->Release();
我也有泄漏。我还尝试在由 ID2D1GdiInteropRenderTarget 创建的 HDC 上使用 DeleteDC() 或 ReleaseDC() 但没有成功。
有什么建议吗?提前致谢!