【问题标题】:MFC Printing with CDC just works on some Printers使用 CDC 进行 MFC 打印仅适用于某些打印机
【发布时间】:2015-09-08 20:41:00
【问题描述】:

我正在一个大项目中实现打印功能来打印所谓的小工具(源自 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 和 LAN 中的 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 错误?

【问题讨论】:

    标签: c++ visual-c++ printing mfc cdc


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多