我正在一个大项目中实现打印功能来打印所谓的小工具(从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上工作?
答案 0 :(得分:1)
CPaintDC在构造时调用CWnd :: BeginPaint,在销毁时调用CWnd :: EndPaint,因此手动调用CDC上的那些可能会有效。
答案 1 :(得分:0)
我刚刚发现问题不在于CDC / CpaintDC。 它只是不适用于我首先测试它的打印机。 我尝试了另一台打印机,但它确实有效。
我为" REAL"创建了另一个问题。问题 MFC Printing with CDC just works on some Printers