MFC PrintWindow(CPaintDC)可以工作,但PrintWindow(CDC)没有

时间:2015-05-22 09:45:17

标签: c++ mfc cwnd

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

但这只适用于渲染PrintPreview。当我真的打印它不会。在这两种情况下,调用相同的函数,唯一不同的是,在预览的情况下 - > “CDC * pDC”是“CPaintDC”对象,并且在实际打印的情况下是“CDC”对象。

为了确保它真正的“PrintWindow”功能不起作用,我在函数[pDC-> Rectangle(...);]中添加了另一行代码,我可以在预览中看到以及纸。

我还考虑过使用CWnd :: Print或CWnd :: PrintClient函数,但在这两种情况下它们都不起作用。

所以我的问题是我可以做什么作为解决方法,或者可能是什么原因导致渲染对象(从CWnd派生)不能在CDC上工作但在CPaintDC上工作?

2 个答案:

答案 0 :(得分:1)

CPaintDC在构造时调用CWnd :: BeginPaint,在销毁时调用CWnd :: EndPaint,因此手动调用CDC上的那些可能会有效。

答案 1 :(得分:0)

我刚刚发现问题不在于CDC / CpaintDC。 它只是不适用于我首先测试它的打印机。 我尝试了另一台打印机,但它确实有效。

我为" REAL"创建了另一个问题。问题 MFC Printing with CDC just works on some Printers