gpt4 book ai didi

c++ - 使用 CDC 的 MFC 打印仅适用于某些打印机

转载 作者:太空宇宙 更新时间:2023-11-04 13:32:08 25 4
gpt4 key购买 nike

我正在一个大项目中实现一个打印函数来打印所谓的小工具(派生自 CWnd)。在小工具类中,我创建了一个函数来将其呈现到设备上下文

PrintPageContent(CDC * pDC, const CRect & rContent, int page, int numPages) 
{
PrintWindow(pDC, PW_CLIENTONLY);
pDC->Rectangle(rContent.left,rContent.top, rContent.right, rContent.bottom);
}

为了轻松呈现小工具,我想到了使用 PrintWindow 函数 https://msdn.microsoft.com/en-us/library/x51z0shh.aspx


什么总是有效的?

  • PrintPreview 中的所有内容
  • 实际打印时的边框矩形

什么不工作?

  • 在“实际打印过程”/“打印到纸张”的某些情况下,小工具未打印出来。

所以我尝试通过 PDF Creator 和局域网中的 3 台本地打印机在 2 台不同的 Windows 机器(Win7、Win8)上打印,结果不同(它们似乎总是一样的,所以我不认为它是某种未初始化的成员)。非常奇怪的是我在机器上有不同的结果,例如有一台打印机适用于 PC A 但不适用于 PC B。

我可以告诉您,打印在我的应用程序中无法正常工作,因此这不是驱动程序问题。打印正常文档、图像完全有效。正如我已经说过的,边框总是被打印出来。

这可能是什么原因造成的?您知道此类问题的案例吗?

提示:作为解决方法,我尝试通过 BitBlt 直接从 UI 的 CPaintDC 复制小工具。在这种情况下,我有同样的问题



为了找到问题,我创建了一个小型测试项目来重现情况。这是源代码

//Create Members
CDC pDC;
HDC hdc;

//Get Printer/Printer Settings
LPCSTR buffer = NULL;
GetDefaultPrinterName(buffer);
hdc = CreateDC("WINSPOOL", buffer, NULL, NULL);
pDC.Attach(hdc);
pDC.m_bPrinting = TRUE;

//Start Document Printing
pDC.StartDoc("TEST");
pDC.StartPage();

//Render Window
PrintWindow(&pDC,PW_CLIENTONLY);

//Render Frame Rectangle
CRect WindowRect;
GetClientRect(WindowRect);
WindowRect.MoveToXY(0,0);
CBrush brush;
brush.CreateSolidBrush(RGB(0,0,0));
pDC.FrameRect(WindowRect, &brush);

// Finish Printing
pDC.EndPage();
pDC.EndDoc();

我在这里面临同样的问题。同一台打印机适用于同一台 PC。我认为唯一的问题可能是我创建 HDC 的线路

hdcBuffer = CreateDC("WINSPOOL", buffer, NULL, NULL);

我认为这个与“printWindow”或“bitblt”相关的调用是问题所在。

或者这可能是 MFC 错误?

最佳答案

它看起来像一个 MFC 错误。不知何故,打印机驱动程序未正确初始化。我尝试了几种解决方案,但无法正常工作。它在最简单的例子中确实失败了,在不同的机器上有不同的结果。

关于c++ - 使用 CDC 的 MFC 打印仅适用于某些打印机,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30996167/

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