Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/144.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 带有CDC的MFC打印仅适用于某些打印机_C++_Visual C++_Printing_Mfc_Cdc - Fatal编程技术网

C++ 带有CDC的MFC打印仅适用于某些打印机

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

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


什么总是有效

  • 打印预览中的所有内容
  • 实际打印时的边框矩形

什么不起作用

  • 在“实际打印过程”/“打印到纸张”的某些情况下,该小工具不会打印

因此,我尝试通过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错误。不知何故,打印机驱动程序没有正确初始化。我尝试了几种解决方案,但都没有成功。在最简单的例子中,它确实失败了,在不同的机器上有不同的结果