首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MFC打印与CDC只在一些打印机上工作。

MFC打印与CDC只在一些打印机上工作。
EN

Stack Overflow用户
提问于 2015-06-23 07:13:16
回答 1查看 1.3K关注 0票数 1

我在一个大项目中实现了一个打印函数,用于打印所谓的小工具(源自CWnd)。在Gadget类中,我创建了一个函数,将其呈现给设备上下文

代码语言:javascript
复制
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和3台本地打印机在2台不同的Windows机器(Win7,Win8)上打印,结果不同(它们看起来总是一样的,所以我不认为它是某种未初始化的成员)。奇怪的是,我在机器上有不同的结果,例如,有一台打印机为PC A工作,但对PC B不起作用。

我可以告诉你,打印在我的应用程序中是行不通的,所以它不是驱动程序问题。正常打印文件,图像完全工作。就像我已经说过的,边境总是印着的。

这可能是什么原因?你知道这类问题的情况吗?

提示:作为一种解决办法,我试图通过CPaintDC直接从UI的BitBlt复制Gadget。在这种情况下,我也有同样的问题

为了找到问题,我创建了一个小型测试项目来重新创建这种情况。这是源代码

代码语言:javascript
复制
//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的线路。

代码语言:javascript
复制
hdcBuffer = CreateDC("WINSPOOL", buffer, NULL, NULL);

我认为这个与"printWindow“或"bitblt”相关的调用是问题所在。

或者这可能是MFC的错误?

EN

Stack Overflow用户

回答已采纳

发布于 2016-01-08 07:32:19

看上去像个MFC臭虫。不知何故打印机驱动程序未被正确初始化。我尝试了几种解决方案,但没能成功。在最简单的例子中,它确实失败了,在不同的机器上得到了不同的结果。

票数 0
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30996167

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档