- 1、本文档共25页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
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; im_nBubbleCount; i++) ar m_rectBubble[i];} else { ar m_nBubbleCount; for(int i=0; im_nBubbleCount; i++) ar m_rectBubble[i];} 注意事项 与的方向 变量存盘与取盘的顺序,必须保证一致! 计数器变量应在数组之前 15.2 打印和打印预览 显示与打印的相同之处 显示与打印的不同之处 显示与打印的相同之处 文档打印时,OnDraw函数接收到的设备描述表对象是与当前打印相关的CDc对象。 实现“所见即所得”(OnDraw为共用函数) 显示的调用顺序:OnPaint-OnDraw 打印的调用顺序:OnPrint-OnDraw MM_TEXT模式编程 打印机与屏幕显示坐标模式相同 显示与打印的不同之处 分辨率不同 Arial字体:printer50 screen20 边界处理不同 屏幕是无界的 打印纸是有界的 例15-2 修改例11-7的程序并观察其打印结果。 void CMyView::OnDraw(CDC* pDC) { CRect rect; GetClientRect(rect); pDC-Rectangle(rect); //画边框 for(int i=0; ipDoc-m_nBubbleCount; i++) // 在视图上显示文档数据 pDC-Ellipse(pDoc-m_rectBubble[i]); } 例15-3 改进吹泡泡程序,使之打印输出与屏幕显示的比例相近 // 设置映射模式 void CMyView::OnPrepareDC(CDC *pDC, CPrintInfo *pInfo) { pDC-SetMapMode(MM_LOMETRIC); CView::OnPrepareDC(pDC, pInfo); } 例15-3 // 响应点击鼠标左键消息 CClientDC dc(this); // 设置设备环境 OnPrepareDC(dc); if(pDoc-m_nBubbleCount MAX_BUBBLE) { int r = rand()%50+10; CRect rect(point.x-r, point.y-r, point.x+r, point.y+r); InvalidateRect(rect, FALSE); dc.DPtoLP(rect); // 转换物理坐标为逻辑坐标 pDoc-m_rectBubble[pDoc-m_nBubbleCount] = rect; pDoc-m_nBubbleCount++; pDoc-SetModifiedFlag(); // 设置修改标志 } CPrintInfo类 数据成员 m_nCurPage(当前正在打印的页码); m_rectDraw(当前可用页面区域); 成员函数 SetMinPage()(指定文档的首页页码) SetMaxPage()(指定文档的尾
文档评论(0)