17.6.2 存储打印数据
应用程序框架将调用视图类中的OnPreparePrinting()函数,为文档初始化打印过程。要求进行基本初始化的目的是为显示的打印对话框提供有关文档中页面数量的信息。也要把有关文档所需页面的信息存储起来,以便以后在打印过程中涉及的其他视图函数中使用它们。这也是在视图类的OnPreparePrinting()函数中完成的,要把这些信息存储在为此目的而定义的一个类对象中,然后把指向这个对象的指针存储在框架将使用的CPrintInfo对象中。该方法主要是为了说明这种机制的工作方式;在大部分情况下,比较容易的方法是完全把这些数据存储在视图对象中。
我们需要存储文档宽度上的页数m_nWidths,以及文档长度上页面的行数量m_nLengths。还需要把包围文档数据的矩形的左上角作为CPoint对象m_DocRefPoint存储起来,因为在根据一个页的页码计算其打印位置时,将使用到左上角这个位置。可以把文档的文件名存储在CString对象m_DocTitle中,这样就可以把它作为标题添加到每一页上。记录页面内可打印区域的大小时,m_DocTitle也很有用。包含这些要求的类的定义是:
- #pragma once
- class CPrintData
- {
- public:
- UINT printWidth; // Printable page width - units 0.01 inches
- UINT printLength; // Printable page length - units 0.01 inches
- UINT m_nWidths; // Page count for the width of the document
- UINT m_nLengths; // Page count for the length of the document
- CPoint m_DocRefPoint; // Top-left corner of the document contents
- CString m_DocTitle; // The name of the document
- // Constructor
- CPrintData():
- printWidth(750), // 7.5 inches
- printLength(1000) // 10 inches
- {}
- };
构造函数设置与A4页对应的可打印区域的默认值,其四个边的页边距为半英寸。可以根据自己的环境更改此设置,当然,也可以在CPrintData对象中以编程(www.cppentry.com)方式更改这些值。
在Solution Explorer窗格中右击Header Files文件夹,然后从弹出式菜单中选择Add | New Item菜单项,就可以向项目中添加一个名称为PrintData.h的新头文件。然后可以在该新文件中输入这个类定义。我们不需要这个类的实现文件。由于只在短时间内使用这个类的对象,因此不必把CObject作为它的基类,或者考虑其他复杂的方法。
打印过程开始于对视图类成员OnPreparePrinting()的调用,所以下面分析如何实现它。