65.9K
CodeProject 正在变化。 阅读更多。
Home

一个简单的打印机制

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.41/5 (10投票s)

2000年5月17日

viewsIcon

236214

downloadIcon

3005

了解如何在您的应用程序中实现打印支持。

引言

一个经常出现的问题是“如何打印?” 在许多情况下,文档/视图类的全面打印处理是不合适的;在其他情况下,例如基于对话框的应用程序,它不能直接通过 MFC 库使用。 这个小类提供了一些简单的行式打印机模拟输出,适用于打印文件、简单文本等。 这是我用于 日志控制 的打印机制(并且此代码也随该项目一起提供)。

void CMyClass::Print()
{
    CPrintDialog dlg(FALSE,
		      PD_ALLPAGES |
		      PD_HIDEPRINTTOFILE |
		      PD_NOPAGENUMS |
		      PD_RETURNDC |
		      PD_USEDEVMODECOPIES);
    if(has a selection)
	{ /* enable selection */
        dlg.m_pd.Flags |= PD_SELECTION;
    } /* enable selection */
    else
    { /* use selection */
        dlg.m_pd.Flags |= PD_NOSELECTION;
    } /* use selection */
    
    switch(dlg.DoModal())
    { /* DoModal */
    case 0:
    case IDCANCEL:
        return;
    case IDOK:
        break;
    default:
        ASSERT(FALSE); // impossible condition
        return;
    } /* DoModal */
     
    CDC dc;
    dc.Attach(dlg.m_pd.hDC);
    printer = new CPrinter(&dc);
    if(printer->StartPrinting())
    { /* success */
        for(some sample loop condition)
        { /* print line */
            CString s;
            ... // form the string you want to print
            printer->PrintLine(s);
        } /* print line */

        printer->EndPrinting();
    } /* success */
    delete printer;
    ::DeleteDC(dc.Detach());
} // CTraceList::Print

这被列为一个简单的打印机制。 它不如我们的书Win32 Programming中的那个那么复杂,但那是一个纯 C 版本。 这是一个更简单但纯 MFC 的例子。

您可以在此处下载此打印代码,或者可以将其作为 日志控制 项目的一部分下载。

CPrinter

CPrinter::CPrinter(CDC * dc)
使用打印机的 DC 构造打印机对象。 这通常从 CPrintDialog 获得,使用标志 PD_RETURNDC,然后使用 CDC::FromHandle 获取 DC 的 MFC 对象。
CPrinter::EndPrinting()
这会终止打印作业。 它调用必要的 EndPageEndDoc 函数。 如果 CPrinter 对象在打印作业处于活动状态时被销毁,析构函数将调用此方法。
int CPrinter::GetPageNumber()
子类的 PageHeading 例程可以调用此函数来获取当前页码。
virtual void CPrinter::PageHeading()
可以在子类中重写此方法以打印页眉。 基类中的默认效果是在左侧打印程序名称,在右侧打印页码。
void CPrinter::PrintLine(const CString & line)
此方法将单行打印到打印机。 没有尝试进行换行。 假定存在隐式的左边距和上边距。 如果该行将溢出现有的可打印页面区域,则会终止当前页面并开始新页面。 页码增加,并在新页面上打印标题(参见 CPrinter::PageHeading())。
virtual void CPrinter::SetPrinterFont()
在基类中,这会将打印机字体设置为 stock ANSI_FIXED_FONT。 子类可以重写此方法以提供自己的字体。
CPrinter::StartPrinting()
在打印机上启动一个文档。 在进行任何 PrintLine 调用之前必须调用此方法。 这设置了默认边距并执行必要的 ::StartDoc 调用。

这些文章中表达的观点是作者的观点,不代表,也不被微软认可。

如果您对本文有任何疑问或意见,请在下面留言。

版权所有 © 2000, The Joseph M. Newcomer Co. 保留所有权利
www.flounder.com/mvp_tips.htm

许可证

本文没有附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论板联系作者。作者可能使用的许可证列表可以在 此处 找到。

© . All rights reserved.