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

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

我正在一个大项目中实现一个打印函数来打印所谓的小工具(派生自 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/

相关文章:

c++ - 通过 std::thread 传递右值

c++ - 如何在mfc中对日期和时间进行排序?

python - 在 Python 中如何打印计算结果,然后将结果保存到变量中?

c++ - 可恢复函数限制背后的基本原理

c++ - 字符串到两个数字

c++ - 在派生类中重新定义 typedef?

c++ - 数组编译时生成?

c++ - 如何将 GCC 类传递给 MSVC dll?

javascript - JS : datatables printing and exporting excel

javascript - JS窗口打印边距破表