【发布时间】:2012-10-15 19:08:50
【问题描述】:
我正在尝试在兼容的渲染目标上同时使用 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() 但没有成功。
有什么建议吗? 提前致谢!
【问题讨论】:
标签: interop gdi memory-leaks direct2d