0

I am working on a project, and try to convert GDI rendering into direct2d rendering. Sometimes I need to use ID2D1GdiInteropRenderTarget interface to rendering some GDI content to direct2d's render target. Here is the problem: If I use GetDC() ReleaseDC() between PushLayer and PopLayer. The content rendered to the HDC is gone, not composited into rendertarget. But If I use GerDC() ReleaseDC between PushAxisAlignedClip and PopAxisAlignedClip, it works correctly. Why It doesn't work between PushLayer and PopLayer, I need to use pushlayer to clip a round rect regeion.

Code is like as follows:

ID2D1HwndRenderTarget* render_target = NULL;
ID2D1GdiInteropRenderTarget* gdi_render_target = NULL;
//create ID2D1HwndRenderTarget and query ID2D1GdiInteropRenderTarget...

render_target->BeginDraw();

D2D1_LAYER_PARAMETERS params = D2D1::LayerParameters(round_rect, round_rect_geometry);
render_target->PushLayer(params, render_layer_);

HDC hdc = NULL;
gdi_render_target->GetDC(D2D1_DC_INITIALIZE_MODE_COPY, &hdc);

// Draw Line with hdc. some code is Omit. 
::MoveToEx(hdc, rc.left, rc.top, &ptTemp);
::LineTo(hdc, rc.right, rc.bottom);

gdi_render_target->ReleaseDC(0);

render_target->PopLayer();
render_target->EndDraw();
zhufachang
  • 21
  • 5

0 Answers0