C++ 带有CDC的MFC打印仅适用于某些打印机
我正在一个大项目中实现一个打印功能来打印所谓的小工具(源自CWnd)。在Gadget类中,我创建了一个函数,将其呈现到设备上下文中C++ 带有CDC的MFC打印仅适用于某些打印机,c++,visual-c++,printing,mfc,cdc,C++,Visual C++,Printing,Mfc,Cdc,我正在一个大项目中实现一个打印功能来打印所谓的小工具(源自CWnd)。在Gadget类中,我创建了一个函数,将其呈现到设备上下文中 PrintPageContent(CDC * pDC, const CRect & rContent, int page, int numPages) { PrintWindow(pDC, PW_CLIENTONLY); pDC->Rectangle(rContent.left,rContent.top, rContent.right
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函数
什么总是有效
- 打印预览中的所有内容
- 实际打印时的边框矩形
什么不起作用
- 在“实际打印过程”/“打印到纸张”的某些情况下,该小工具不会打印李>
因此,我尝试通过PDF Creator和局域网中的3台本地打印机在两台不同的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错误。不知何故,打印机驱动程序没有正确初始化。我尝试了几种解决方案,但都没有成功。在最简单的例子中,在不同的机器上有不同的结果,它确实失败了。它看起来像一个MFC错误。不知何故,打印机驱动程序没有正确初始化。我尝试了几种解决方案,但都没有成功。在最简单的例子中,它确实失败了,在不同的机器上有不同的结果