资源预览内容
第1页 / 共25页
第2页 / 共25页
第3页 / 共25页
第4页 / 共25页
第5页 / 共25页
第6页 / 共25页
第7页 / 共25页
第8页 / 共25页
第9页 / 共25页
第10页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
Visual C+与面向对象程序设计教程,第十五章 文档读写与打印 计算机教学实验中心 西安交通大学,教学目标,序列化 文档打印编程技术,学习要求,深入理解序列化的基本思想 掌握序列化及相应处理代码的编制 了解MFC的打印工作流程 掌握打印程序编制,授 课 内 容,15.1 序列化(Serialize) 15.2 打印和打印预览 15.3自定义类的序列化 15.4 编写独立的打印处理程序 15.5 更新命令用户接口(UI)消息 调试技术 程序设计举例,15.1 序列化(Serialize),文档对象可以将其当前状态(由其成员变量的值表示)写入到永久性存储体(通常是指磁盘)中,以后还可从永久性存储体中读取对象的状态(载入),从而重建对象。 在文档打开时能够自动把文档中的数据转换为文档类所支持的对象,在保存文档时能够自动将文档类对象转换为文档数据格式; CArchive类 运算符:插入(),修改数据的存盘,设置修改标志的成员函数 CDocument:SetModifiedFlag void SetModifiedFlag( BOOL bModified = TRUE ); 设置的时机 一般在视图类函数中,修改数据后调用,例15-1 序列化,为例11-7的吹泡泡程序增加序列化 代码 if(ar.IsStoring() ar m_nBubbleCount; for(int i=0; i m_rectBubblei;,注意事项,的方向 变量存盘与取盘的顺序,必须保证一致! 计数器变量应在数组之前,15.2 打印和打印预览,显示与打印的相同之处 显示与打印的不同之处,显示与打印的相同之处,文档打印时,OnDraw函数接收到的设备描述表对象是与当前打印相关的CDc对象。 实现“所见即所得”(OnDraw为共用函数) 显示的调用顺序:OnPaint-OnDraw 打印的调用顺序:OnPrint-OnDraw MM_TEXT模式编程 打印机与屏幕显示坐标模式相同,显示与打印的不同之处,分辨率不同 Arial字体:printer-50 screen-20 边界处理不同 屏幕是无界的 打印纸是有界的,例15-2,修改例11-7的程序并观察其打印结果。 void CMyView:OnDraw(CDC* pDC) CRect rect; GetClientRect( ,例15-3,改进吹泡泡程序,使之打印输出与屏幕显示的比例相近 / 设置映射模式 void CMyView:OnPrepareDC(CDC *pDC, CPrintInfo *pInfo) pDC-SetMapMode(MM_LOMETRIC); CView:OnPrepareDC(pDC, pInfo); ,例15-3,/ 响应点击鼠标左键消息 CClientDC dc(this);/ 设置设备环境 OnPrepareDC(/ 设置修改标志,CPrintInfo类,数据成员 m_nCurPage(当前正在打印的页码); m_rectDraw(当前可用页面区域); 成员函数 SetMinPage()(指定文档的首页页码) SetMaxPage()(指定文档的尾页页码) 取关于打印页码的设置 UINT GetMinPage( ) const; UINT GetMaxPage( ) const;,打印和打印预览的主要过程,调用OnPreparePrinting函数创建与打印有关的设备描述表对象 调用OnBeginPrinting函数并基于已创建的设备描述表对象来设置文档特性,将任何需要的信息保存在设备描述表对象中例如分配字体、画笔、画刷和其他用于打印的对象。 调用OnPrepareDC函数为打印设置文本或绘图员性,调整视口原点以便打印当前页。 调用OnPrint函数,该函数在调用OnDraw前先选择一种字体或其他由OnBeginPrinting分配的对象,然后调用OnDraw函数执行输出。 调用0nEndPrinting删除由onBeginPrinting分配的所有对象。(对于每页,3,4两步反复调用),15.3自定义类的序列化,从CObject类派生出自定义类 重载自定义类的Serialize()成员函数 说明中,加入DECLARE_SERIAL()宏 为自定义类定义一个不带参数的构造函数; 为自定义类重载赋值运算符“=”; 在自定义类的源代码文件中加入IMPLEMENT_SERIAL()宏。,15.4 编写独立的打印处理程序,利用现有模块 打印页眉、正文、页脚; 选页打印,OnPrint函数,打印页眉 CDocument:GetTitle ( )取当前文档名 CDC:GetTextExtent ( ) 计算字符串在当前映射模式下的宽度和高度 打印泡泡数据 打印页脚 MM_WIPS模式1/1440英寸 point.y-=360,15.5 更新命令用户接口(UI)消息,菜单选项是否无效的?(灰色显示) 1、在窗口类中加入处理更新命令用户接口消息函数的说明; 2、在窗口类的消息映射宏中加入更新命令用户接口宏; 3、编写更新命令用户接口消息处理函数。 打勾: (m_nGrad为3,则打勾) pCmdUI-SetCheck(m_nGrad=3); 变灰: (m_nGrad为0,则变灰,即:不为0有效) pCmdUI-Enable(m_nGrad!=0);,调试技术,Developer Studio的输出窗口 激活或取消 选项 Build(建立) Debug(调试) Find In Files 1(在文件1中查找) Find In Files 2(在文件2中查找) Results(结果)。,程序设计举例,例15-1 实现吹泡泡程序的序列化功能。 例15-2 修改例11-6的程序并观察其打印结果。 例15-3 改进吹泡泡程序,使之打印输出与屏幕显示的比例相近。 例15-4 声明一个Person类,并使之支持序列化。 例15-5 修改例15-3的吹泡泡程序,使其打印每个泡泡的数据值。 例15-6 使用定时器使一个泡泡(椭圆)在屏幕中自动移动,设置三级速度菜单,并使速度菜单的相应选项前打钩。 例15-7 七巧板,例15-7,七巧板是我国民间流传的一种拼图游戏,制作简单但变化多端,具有很高的益智价值。七巧板制作非常简单,使用一张正方形的厚纸板按图15-6所示图样裁开即可。本程序在计算机上模拟使用七巧板进行拼图,上机练习题,制作简单编辑器:重载键盘消息,接收用户字符输入并在客户区显示。要求可保存输入字符并序列化。 为例13-4增加序列化代码。 为例13-5增加序列化代码。 为例14-1编写序列化代码,并编写打印代码,使打印格式为每行一职工: 姓名 性别 出生日期 婚姻状况 所在部门 职务 = 张三 男 1972/10/03 未婚 开发部 组长 李四 男 1967/06/12 已婚 开发部 副经理,结束语,学好程序设计语言的唯一途径是 上机练习。 你的编程能力与你在计算机上投入的时间成 正比。,
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号