MFC印刷与中华网只是适用于某些打印机(MFC Printing with CDC just wor

2019-10-23 11:50发布

我在一个大项目打印所谓的小工具(派生于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


什么是始终工作?

  • 一切都在打印预览
  • 边境矩形,当我实际打印

心不是什么工作?

  • 小工具心不是印在“实际印刷过程” /“打印到纸张”的一些情况下。

所以,我想通过PDF Creator和通过对2种不同的Windows机器(Win7的,Win8的)产生不同的结果在我的LAN 3台本地打印机打印(他们似乎总是相同的,所以我不认为它的某种未初始化的成员) 。 请告诉我非常奇怪的是,我对机器不同的结果,例如有一台打印机,其适用于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”或“块传送”连接的问题。

或者,这会是一个MFC错误?

Answer 1:

它看起来像一个MFC的Bug。 不知怎的,打印机驱动程序不正确初始化。 我尝试了几种解决方案的,但没能得到这个工作。 它真的失败,在与不同的充机不同的结果,最简单的例子。



文章来源: MFC Printing with CDC just works on some Printers