我試圖在兼容的渲染目標上使用Gdi和Direct 2D同時渲染位圖。 我創建D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE選擇兼容的目標,然後我做的如下:使用Direct 2D的GDI對象泄漏GdiInteropRenderTarget
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(),但沒有成功。
有什麼建議嗎? 在此先感謝!