打印预览体系结构

本文说明 MFC 框架如何实现打印预览功能。 所涵盖的主题包括:

  • 打印预览处理

  • 修改的打印预览

打印预览是一些与屏幕显示和打印不同,这是因为,使用屏幕,而不是直接绘制到设备的图像,应用程序必须模拟打印机。 为此, Microsoft 基础类库定义了从 CDC 类派生的特定 (未记录的) 类,调用 CPreviewDC。 所有 CDC 对象包含两个设备上下文,但是,通常它们是相同的。 在 CPreviewDC 对象,它们是不同的:第一个表示模拟的打印机,因此,第二个表示输出实际上显示的屏幕。

打印预览处理

当用户选择打印预览命令从 文件 菜单时,结构创建一 CPreviewDC 对象。 每当您的应用程序执行设置打印机上下文特性的操作,框架也对屏幕设备上下文的类似操作。 例如,因此,如果您的应用程序提供打印选项的字体,框架为模拟打印机字体的屏幕显示选择的字体。 每当您的应用程序将输出发送到打印机,框架将输出发送到屏幕上。

每个绘图文档的页的打印预览与打印作业不同顺序。 在打印期间,框架继续打印循环,直到该页的某个范围内呈现。 在打印预览期间,一页随时显示,应用程序然后等待;进一步页面上没有显示,直到用户响应。 在打印预览期间,在普通的屏幕显示期间,,就象执行应用程序还必须响应 WM_PAINT 消息。

CView::OnPreparePrinting 函数调用,则预览模式调用时,就象是在打印作业的开头。 CPrintInfo 结构 结构传递给该函数包含值可以设置调整打印预览操作的某些特征的多个成员。 例如,可以设置 m_nNumPreviewPages 成员指定是否在页或两页模式若要预览文档。

修改的打印预览

可以轻松地修改打印预览行为和外观多种方式。 例如,可以,如:

  • 使打印预览窗口显示便于访问滚动条到文档中的所有页。

  • 原因保留在文档中的用户的位置的打印预览通过开始显示当前页。

  • 导致其他初始化为打印预览和打印执行。

  • 导致打印预览有关演示页编号在您的格式。

如果您知道文档处于并调用具有适当的值 SetMaxPage ,在打印期间,框架可以使用此信息在预览模式以及。 对于框架知道文档的长度,它在预览模式可提供预览窗口以滚动条,允许用户在文档来回调用。 如果尚未设置文档的长度,框架无法确定滚动框指示当前位置,因此,该结构不添加滚动条。 在这种情况下,用户必须使用在预览窗口中的控件条的下一页和上一页按钮通过文档调用。

对于打印预览,您可能会发现赋值。 CPrintInfom_nCurPage 成员,因此,即使您为普通打印因此不执行任何操作。 在普通的打印期间,此成员传播从框架的信息到您的视图类。 这是框架如何调用视图应该打印哪一页。

相反,那么,当打印预览模式启动时, m_nCurPage 成员传播在相反的方向的信息:从视图为结构。 框架使用该成员的值确定应先预览哪些页。 此成员的默认值是 1,因此,文档的第一页最初显示。 ,在打印预览命令调用后,您可以重写 OnPreparePrinting 将此成员添加到中查看该页的数字。 ,当移动从规则显示模式向打印预览模式时,因此,应用程序维护用户的当前位置。

有时可能 OnPreparePrinting 执行其他初始化具体取决于该类调用的打印作业或对打印预览。 可以通过检查在 CPrintInfo 结构的 m_bPreview 成员变量确定此。 ,在打印预览调用时,此成员设置为 TRUE

CPrintInfo framework 还包含一个成员名为 m_strPageDesc,格式化字符串显示在底部的屏幕在单页和多个页架构。 默认情况下这些字符串是窗体 “页 n”, “调用 n - m,”,但您可以修改 m_strPageDescOnPreparePrinting 的内部和字符串设置为更精美的操作。 有关更多信息,请参见 MFC 引用 中的 CPrintInfo 结构

请参见

参考

打印和打印预览

打印

CView 类

CDC 类