gpt4 book ai didi

printing - 如何使用直接 2d 在打印机 DC 中绘制文本?

转载 作者:行者123 更新时间:2023-12-01 00:34:43 31 4
gpt4 key购买 nike

我使用直接 2d API 在 GDI dc 中正确绘制文本,

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

打印机 hdc 创建如下,

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

Direct 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不能正确绑定(bind)hdc,所以什么也没有打印出来,

但如果 hdc 是 GDI dc 在窗口中绘制文本,它将成功绑定(bind),然后绘制正确的文本。

绑定(bind)打印机DC有什么不同吗?

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

最佳答案

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

MSDN documentation on GDI and Direct2D interoperability指出,即使 Direct2D 确实与打印机 DC 一起使用,它也会在内部执行此操作:

When you use an ID2D1DCRenderTarget, it renders Direct2D content to an internal bitmap, and then renders the bitmap to the DC with GDI.

关于printing - 如何使用直接 2d 在打印机 DC 中绘制文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42054401/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com