我正在一个大项目中实现打印功能来打印所谓的小工具(从CWnd派生)。在Gadget类中,我创建了一个函数来将其渲染到设备上下文
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和我的局域网中的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错误?
答案 0 :(得分:0)
它看起来像一个MFC Bug。不知何故,打印机驱动程序没有正确初始化。我尝试了几种解决方案,但无法实现这一目标。它在最简单的例子中确实失败了,在不同的机器上有不同的结果。