2017-02-05 2 views
1

내가 올바르게 GDI의 DC에서직접 2d를 사용하여 프린터 DC에서 텍스트를 그리는 방법은 무엇입니까?

텍스트를 그리기 위해 직접 2D API를 사용하지만 프린터 DC에서 텍스트를 그리는 동일한 코드를 사용하는 경우, 그것은

프린터 HDC는 다음과 같이 만드는 것입니다 실패 ,

hdc = CreateDC("WINSPOOL", printerName, "", pdevMode); 

다이렉트 2D 그리기 텍스트 코드는 불행하게도

if (p_d2dFactory == NULL) { 
     hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &p_d2dFactory); 
    }  

    if (SUCCEEDED(hr) && p_dcTarget == NULL) { 
     hr = p_d2dFactory->CreateDCRenderTarget(&props, &p_dcTarget); 
    } 

    if (SUCCEEDED(hr)) { 
     hr = p_dcTarget->BindDC(hdc, &rc); 
    } 

    if (SUCCEEDED(hr)) {  
     p_dcTarget->BeginDraw(); 
     p_dcTarget->Clear(NULL); 
     p_dcTarget->DrawTextLayout(origin, g_pTextLayout,p_dbrush); 
     hr= p_dcTarget->EndDraw(); 
    } 

다음과 같이 p_dcTarget는 HDC 코르 바인딩 할 수 없습니다입니다 바로 인쇄 할 것이므로 아무 것도 출력되지 않습니다.

그러나 hdc가 창에 텍스트를 그리는 GDI dc 인 경우, 성공적으로 바인딩 한 다음 정확한 텍스트를 그립니다.

DC 프린터를 바인딩 할 때 다른 내용이 있습니까?

이 문제에 대한 제안이 있으십니까? 감사.

답변

1

this discussion on MSDN에 따르면 Direct2D에서 프린터 DC로 직접 인쇄 할 수 없습니다. 대신, 메모리 내 비트 맵으로 렌더링 한 다음 BitBlt 또는 StretchBlt으로 해당 비트 맵을 프린터로 복사해야합니다. 당신이 ID2D1DCRenderTarget를 사용하는 경우

, 그것은 내부 비트 맵에 Direct2D의 내용을 렌더링하고 렌더링 :

그 밖으로 MSDN documentation on GDI and Direct2D interoperability 점, Direct2D의 프린터의 DC와 작업을 한 경우에도 내부적으로이 일을 할 것입니다 GDI를 사용하는 DC에 대한 비트 맵

관련 문제