一个简单的打印机制






4.41/5 (10投票s)
2000年5月17日

236214

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()
- 这会终止打印作业。 它调用必要的
EndPage
和EndDoc
函数。 如果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
许可证
本文没有附加明确的许可证,但可能在文章文本或下载文件本身中包含使用条款。如有疑问,请通过下面的讨论板联系作者。作者可能使用的许可证列表可以在 此处 找到。