Printing 如何使用direct 2d在打印机DC中绘制文本?

Printing 如何使用direct 2d在打印机DC中绘制文本?,printing,direct2d,gdi,Printing,Direct2d,Gdi,我使用Direct2D API在GDI dc中正确绘制文本 但是当我使用相同的代码在打印机DC中绘制文本时,它失败了 打印机hdc创建如下: hdc = CreateDC("WINSPOOL", printerName, "", pdevMode); 直接二维绘图文本代码段如下所示 if (p_d2dFactory == NULL) { hr = D2D1CreateFactory(D2D1_FACTORY_TYPE_SINGLE_THREADED, &p

我使用Direct2D API在GDI dc中正确绘制文本

但是当我使用相同的代码在打印机DC中绘制文本时,它失败了

打印机hdc创建如下:

   hdc = CreateDC("WINSPOOL", printerName, "", pdevMode);
直接二维绘图文本代码段如下所示

    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是在窗口中绘制文本的GDIDC,它将成功绑定,然后绘制正确的文本

绑定打印机DC时有什么不同吗

对这个麻烦有什么建议吗?谢谢。

根据,您不能直接从Direct2D打印到打印机DC。相反,您需要渲染内存中的位图,然后使用
BitBlt
StretchBlt
将该位图复制到打印机

作者指出,即使Direct2D与打印机DCs一起工作,它也会在内部执行此操作:

使用ID2D1DCRenderTarget时,它会将Direct2D内容渲染到内部位图,然后使用GDI将位图渲染到DC