正在加载图片...
第13单元文档读写与打印 263 ar << (int)m mArried >〉 m Idnumb ar>〉 m strName ar >>m strAtion: ar >> m nSe ar >>m nAge ar >>(int)m mArried; 分析:MFC在从磁盘文件载入对象状态并重建对象时,需要有一个缺省的不带任 何参数的构造函数以及一个重载的赋值运算符。序列化对象将用该构造函数生成一个对象, 然后调用 Serialize()函数,用重建对象所需的值来填充所有的数据成员 重载的赋值运算符也是序列化所必需的。注意最后通过this指针返回 PErson类对象自 身的方法 在序列化成员函数 Serialize()中包含对象的保存和载入两部分。注意, CArchive类的 ”和“<”操作符并不支持所有的标准数据类型。支持的数据类型有: CObject、BYT WORD、int、LONG、 DWORD、foat和 double等。其他的类型的数据要进行序列化输入输 出时,需要将该类型的数据转化为上述几种类型之一方可 另外,在类的实现(类声明)文件开始处,还要加入 I MPLEMENT SERIAL()宏 IMPLEMENT SERIAL()宏用于定义一个从 CObject派生的可序列化类的各种参数。该宏 的第1和第2个参数分别代表可序列化的类名和该类的直接基类。第3个参数是对象的版本 号,可以是一个大于或等于零的整数。MFC序列化代码在将对象读入内存时检查版本号 如果磁盘文件上的对象的版本号和内存中的对象的版本号不一致,MFC将抛出一个 CArchive Exception类的异常,阻止程序读入一个不匹配版本的对象。 现在,我们就可以象使用标准MFC类一样使用 PErson类的序列化功能了 134编写独立的打印处理程序 MFC的打印功能由视图类的 OnPaint()成员函数完成。在缺省情况下, OnPaint()调 用 OnDraw()进行打印,这样就可实现“所见即所得”的打印效果。如果要求打印格式与 显示格式不同,那么就要重载 On Print()函数,自行编写打印代码 应用程序框架每打印一页调用 OnPaint()函数一次,这是为了方便输出页眉、页码等 与页面有关的信息。如果要打印的内容不只一页,则要在 On Print()函数中正确设置要打 印的内容 例135修改例13-3的吹泡泡程序,使其打印每个泡泡的数据值。打印格式为每页40第 13 单元 文档读写与打印 - 263 - ar << (int)m_bMarried; } else { ar >> m_IDnumber; ar >> m_strName; ar >> m_strNation; ar >> m_nSex; ar >> m_nAge; ar >> (int)m_bMarried; } } 分 析:MFC 在从磁盘文件载入对象状态并重建对象时,需要有一个缺省的不带任 何参数的构造函数以及一个重载的赋值运算符。序列化对象将用该构造函数生成一个对象, 然后调用 Serialize()函数,用重建对象所需的值来填充所有的数据成员。 重载的赋值运算符也是序列化所必需的。注意最后通过 this 指针返回 CPerson 类对象自 身的方法。 在序列化成员函数 Serialize()中包含对象的保存和载入两部分。注意,CArchive 类的 “>>”和“<<”操作符并不支持所有的标准数据类型。支持的数据类型有:CObject、BYTE、 WORD、int、LONG、DWORD、float 和 double 等。其他的类型的数据要进行序列化输入输 出时,需要将该类型的数据转化为上述几种类型之一方可。 另外,在类的实现(类声明)文件开始处,还要加入 IMPLEMENT_SERIAL()宏。 IMPLEMENT_SERIAL()宏用于定义一个从 CObject 派生的可序列化类的各种参数。该宏 的第 1 和第 2 个参数分别代表可序列化的类名和该类的直接基类。第 3 个参数是对象的版本 号,可以是一个大于或等于零的整数。MFC 序列化代码在将对象读入内存时检查版本号。 如果磁盘文件上的对象的版本号和内存中的对象的版本号不一致,MFC 将抛出一个 CArchiveException 类的异常,阻止程序读入一个不匹配版本的对象。 现在,我们就可以象使用标准 MFC 类一样使用 CPerson 类的序列化功能了。 13.4 编写独立的打印处理程序 MFC 的打印功能由视图类的 OnPrint()成员函数完成。在缺省情况下,OnPrint()调 用 OnDraw()进行打印,这样就可实现“所见即所得”的打印效果。如果要求打印格式与 显示格式不同,那么就要重载 OnPrint()函数,自行编写打印代码。 应用程序框架每打印一页调用 OnPrint()函数一次,这是为了方便输出页眉、页码等 与页面有关的信息。如果要打印的内容不只一页,则要在 OnPrint()函数中正确设置要打 印的内容。 [例 13-5] 修改例 13-3 的吹泡泡程序,使其打印每个泡泡的数据值。打印格式为每页 40
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有