收藏 分销(赏)

ch7-文档及视图.ppt

上传人:仙人****88 文档编号:13352794 上传时间:2026-03-06 格式:PPT 页数:19 大小:652.50KB 下载积分:10 金币
下载 相关 举报
ch7-文档及视图.ppt_第1页
第1页 / 共19页
ch7-文档及视图.ppt_第2页
第2页 / 共19页


点击查看更多>>
资源描述
Click to edit Master text styles,Second level,Third level,Fourth level,Fifth level,*,Click to edit Master title style,第,7,章,文档和视图,授课教师:沈峰,MFC,应用框架的基础是,Document/View,结构,文档是应用和用户操作的实体,视图实现文档的显示、编辑和打印。,CDocument,类提供了一个标准文档处理的接口,,CView,类提供文档的用户界面。,7.1,文档的序列化,7.1.1,磁盘文件和序列化,MFC,提供了一个,档案类,(,CArchive,),,,允许将一个,复杂结构,的对象保存到,字节流,,待对象删除后,又可以从字节流中恢复对象。这种保存数据的方法,称为,序列化,(,或串行化,),。,之所以称为是字节流,是因为序列化除了可以使用文件保存对象以外,还可以通过网络和串口传输对象。,1.,档案类,CArchive,的常用函数,CArchive,类没有基类,提供了基本的保存和读取对象的操作,2.,文件的读写操作,文件,I/O(,输入,/,输出,),服务,是任何操作系统的主要服务,,Win32,提供了许多与文件相关的,API,函数,:打开文件、关闭文件、读文件、写文件、搜寻数据等,,MFC,把这些操作都,封装在,CFile,中了。,文件的读写,:,先创建一个,CFile,对象,然后创建一个,CArchive,对象。,注意,必须保证,CArchive,对象和,CFile,对象的打开模式一致。,例,7.1,编写一个基于对话框的应用程序,Li7_1,,,使用档案类进行序列化。主要代码如下:,保存文件,UpdateData(TRUE,);/,控件,变量,CFile,f;,f.Open(,.,test.txt,CFile:,modeCreate,|CFile:,modeWrite,);,CArchive,ar(&f,CArchive:,store,);,ar,m_test1,m_test1,m_test2;,ar.Close,();,f.Close,();,UpdateData(FALSE,);/,变量,控件,7.1.2,Document/View,框架的主要成员,Document/View,框架中的核心类有,CDocument,类、,CView,类、框架,CFrameWnd,类、,CDocTemplate,类和,应用,CWinApp,类。,CWinApp,应用类,封装了,Windows,程序的初始化、运行和退出功能。基于,MFC,应用框架的程序必须有一个,CWinApp,派生类对象,该对象在任何窗口创建之前被构造。,框架类,CFrameWnd,用于处理应用程序的框架。在应用程序运行时,创建一个主框架派生类对象,即主框架窗口。当主框架窗口关闭时,应用程序结束。框架窗口负责管理视图的位置和显示,更新用户界面对象,包括菜单、工具栏、状态栏等。,【例,7.2,】,编写一个单文档的,MFC,应用程序,Li7_2,,,修改框架窗口的风格,。当程序运行时,显示如图,7.4,所示结果。,(1),使用,MFC,AppWizardexe,向导创建一个单文档的,MFC,应用程序,Li7_2,。,(2),选择项目工作区中的,ClassView,视图,展开,CMainFrame,,,双击打开,PreCreateWindow(CREATESTRUCT,&,cs,),函数,并添加如下代码。,BOOL,CMainFrame:PreCreateWindow(CREATESTRUCT,&,cs,),if(!,CFrameWnd:PreCreateWindow(cs,),return FALSE;,/,给框架窗口增加滚动条,cs.style,=,cs.style|WS_HSCROLL|WS_VSCROLL,;,/,设置窗口为屏幕的,1/3,cs.cx,=:GetSystemMetrics(SM_CXSCREEN)/3;,cs.cy,=:GetSystemMetrics(SM_CYSCREEN)/3;,/,cs.style,/,使主框架的最大化按钮无效,return TRUE;,通过修改参数,CREATESTRUCT,结构体变量,cs,的值,来实现修改框架窗口的风格,,cs,用来保存初始化参数。,文档类,CDocument,负责应用程序的数据管理,使用成员函数,Serialize(),实现文档文件的读写。,【例,7.4,】,编写一个多文档的,MFC,应用程序,Li7_4,,,重载,OnNewDocument,(),和,DeleteContents,(),函数。参见教材,P170,文档模板类,CDocTemplate,将原本独立的文档、视图和框架窗口对象组织在一起。,视图类,CView,:,视图是文档和用户之间的中介,一个视图对应于一个文档,一个文档可以建立多个视图,用户通过视图操纵文档,视图提供文档的用户界面,支持文档显示、编辑和打印等。,视图中的,OnDraw,函数,执行两类操纵:一种是通过文档类成员函数,取得文档数据,;另一种是使用图形设备接口,CDC,类成员函数以特定方式,显示数据。,【例,7.5,】,编写一个单文档的,MFC,应用程序,Li7_5,,,视图接收键盘输入。参见教材,P175,。,结果分析与讨论:通过处理键盘消息,ON_CHAR,,,接受键盘输入并通过,Invalidate(),函数发送,OnPaint,消息,通过,OnDraw,(),函数在视图中显示相应文字。,【例,7.6,】,编写一个单文档的,MFC,应用程序,Li7_6,,,利用,CHtmlView,创建浏览器。,参见教材,P176,。,结果分析与讨论:通过,CHtmlView,类来实现浏览器,利用其成员函数,Navigate2,实现定位到一个,URL,,,并演示了一种在,CMainFrame,中通过当前活动文档向视图传递信息的方法。,7.1.3,SDI,和,MDI,的序列化,通过,MFC AppWizard,生成的框架中,文档类里有一个,Serialize(),函数可以实现文件的读写,代码如下,:,void,CMDITestDoc:,Serialize,(CArchive,&,ar,),if(,ar.IsStoring,(),/TODO:add storing code here,else,/TODO:add loading code here,使用序列化,不必关心文件打开、关闭的具体过程,只需完善,Serialize,方法即可。,SDI,和,MDI,的序列化类似,下面通过实例来说明。,Thank You!,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服