17.5 打印文档(2)
CPrintInfo的所有数据成员都是public。在打印草图时我们感兴趣的数据成员如表17-3所示。
表 17-3
|
数 据 成 员
|
用 途
|
|
m_pPD
|
该指针指向显示打印对话框的对象CPrintDialog
|
|
m_bDirect
|
如果打印操作将绕过打印对话框,框架将把这个
成员设置为TRUE;否则为FALSE
|
|
m_bPreview
|
这是一个BOOL型成员,如果选择了File | Print
Preview菜单项,那么它的值是TRUE;否则为FALSE
|
|
m_bContinuePrinting
|
这是一个BOOL型成员。如果把它设置为TRUE,
那么框架将继续图17-5所示的打印循环。如果把它设
置为FALSE,则结束打印循环。只有在没有把打印操
作的页记数传递给CPrintInfo对象(使用SetMaxPage()成
员函数)时,才需要设置这个变量。在完成打印操作以后,
需要把这个变量设置为FALSE
|
|
m_nCurPage
|
这是一个UINT型的值,它存储当前页的页码。页面通常
从1开始编号
|
|
m_nNumPreviewPages
|
这是一个UINT型的值,它指定在打印预览窗口中显示的
页面数量。它的值可以是1或2
|
|
m_lpUserData
|
这是一个LPVOID型成员,它存储指向所创建对象的指针。
这样就可以创建存储有关打印操作的其他信息的对象,并且
可以把它和CPrintInfo对象关联起来
|
|
m_rectDraw
|
这个CRect对象以逻辑坐标定义页面的可用区域
|
|
m_strPageDesc
|
这个CString对象包含格式字符串,框架使用该字符串
在打印预览期间显示页码
|
CPrintInfo对象具有如表17-4所示的public成员函数。
表 17-4
|
成 员 函 数
|
说 明
|
|
SetMinPage(UINT nMinPage)
|
它的参数指定文档第一页的页码。它不返回任何值
|
|
SetMaxPage(UINT nMaxPage)
|
它的参数指定文档最后一页的页码。它不返回任何值
|
|
GetMinPage() const
|
把文档第一页的页码作为UINT型值返回
|
|
GetMaxPage() const
|
把文档最后一页的页码作为UINT型值返回
|
|
GetFromPage() const
|
把要打印的文档第一页的页码作为UINT型
值返回。这个值通过打印对话框设置
|
|
GetToPage() const
|
把要打印的文档最后一页的页码作为UINT型
值返回。这个值通过打印对话框设置
|
在打印一个包含几页的文档时,需要明白这个文档占用多少打印页,并且需要把这个信息存储在CPrintInfo对象中,以便提供给框架。利用当前视图中您自己的OnPreparePrinting()成员可以完成这个操作。
页码存储为UINT类型。要设置文档中第一页的页码,需要调用CPrintInfo对象中的成员函数SetMinPage(),它把这个页码作为一个参数。它不返回任何值。要设置文档中最后一页的页码,需要调用函数SetMaxPage()。如果以后想检索这些值,可以调用CPrintInfo对象中的成员函数GetMinPage()和GetMaxPage()。
提供的页码存储在由CPrintInfo对象的m_pPD成员所指的CPrintDialog对象中,从菜单中选择File | Print菜单项时,这些页码将显示在弹出的对话框中。然后用户可以指定要打印的第一页和最后一页的页码,通过调用CPrintInfo对象的成员GetFromPage()和 GetToPage()可以检索它们。在这两种情况下,返回的值都是UINT类型。对话框将自动验证要打印的第一页和最后一页的页码是否在指定文档的最小和最大页码时提供的范围内。
前面讨论了在管理打印时可以在视图类中实现的函数,其中大部分工作是由框架来完成的。另外,还讨论了通过CPrintInfo对象可以将哪些信息传递到与打印有关的函数中。如果能够为Sketcher文档实现基本的多页打印能力,就可以更清楚地了解打印的详细技巧。