Printing 如何使用direct 2d在打印机DC中绘制文本?
我使用Direct2D API在GDI dc中正确绘制文本 但是当我使用相同的代码在打印机DC中绘制文本时,它失败了 打印机hdc创建如下: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
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