我正在一个大项目中实现打印功能,以打印所谓的小工具(源自CWnd)。在小工具类中,我创建了一个函数以将其渲染到设备上下文中

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上工作的原因是什么?

最佳答案

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

关于c++ - MFC PrintWindow(CPaintDC)有效,但PrintWindow(CDC)不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30393458/

10-10 13:17