Visual C++基础教程课件:文档视图和单文档界面.pptVIP

Visual C++基础教程课件:文档视图和单文档界面.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共119页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

图12-5序列化过程CArchive对象为CFile对象缓冲数据并保持一个内部标志,该标志用来指明CArchive对象是要存储(写到磁盘)还是要加载(从磁盘读取)。在任何时刻,只能有一个活动的CArchive对象与文件相连。应用程序框架负责CFile和CArchive对象的构造,为CFile对象打开相应的磁盘文件,并将CArchive对象与CFile对象关联。我们要做的是在Serialize函数中将数据存到CArchive对象中,或从CArchive对象中取出。在执行“文件”→“保存”和“文件”→“打开”菜单命令时,应用程序框架调用文档的Serialize函数。Serialize函数使用CArchive的引用作为参数。CArchive::IsStoring成员函数用来检索CArchive对象的内部标志,如果CArchive对象被用于存储数据,则返回非0值,如果返回0,则CArchive对象是用于读取数据。在Serialize函数中,可以使用CArchive类中重载的插入运算符()和提取运算符()执行数据的读/写操作。插入和提取运算符支持对基本数据类型直接进行读/写操作,基本数据类型包括BYTE、WORD、DWORD、long、float、double、int、unsignedint、short和char。除了可以直接支持这些基本数据类型外,MFC还重载了和运算符,以便直接序列化像CString等非基本数据类型,这些非基本数据类型包括CString、CPoint、CSize、CTime、CTimeSpan、CRect、COleCurrency、COleVariant、COleDateTime和COleDateTimeSpan。另外,类型为SIZE、POINT和RECT的结构也可以直接序列化。【例12.2】为例12.1的应用程序SDISquares添加序列化功能,将各方格的颜色以及当前颜色存入文件,并允许从文件中读取。打开CSDISquaresDoc类的Serialize函数,并添加如下黑体的代码:voidCSDISquaresDoc::Serialize(CArchivear){ if(ar.IsStoring()) { for(inti=0;i4;i++) for(intj=0;j4;j++) arm_clrGrid[i][j]; arm_clrCurrentColor; } else { for(inti=0;i4;i++) for(intj=0;j4;j++) arm_clrGrid[i][j]; arm_clrCurrentColor; }}12.3.3编写可序列化类在MFC中,可以创建自己的可序列化的类,使其对象具有将自身进行序列化的能力。编写一个具有序列化功能的类,可以按以下5个步骤进行。1.直接或间接从CObject类派生出新的类CObject类是MFC类库中大多数类的基类,它定义了序列化的基本协议和功能。因此如果新类是从CObject类或其派生类派生出来的,则新类就自动获得了序列化的功能。2.重载Serialize成员函数Serialize成员函数在CObject类中定义,它负责对对象的当前状态(即数据成员的值)进行实际的序列化。该函数有一个CArchive对象的引用作为参数,通过此参数可进行对象数据的读/写。CArchive对象的成员函数IsStoring用来指示序列化过程是存储(写数据)还是加载(读取数据),根据IsStoring函数的返回值,可以利用插入运算符()将对象数据输出到CArchive对象中,或者用提取运算符()从CArchive对象中提取数据。例如,如下的类从CObject类派生,它有两个数据成员,重载Serialize函数可实现对数据成员的序列化。classCPerson:publicCObject{public:DECLARE_SERIAL(CPerson)CPerson(){}; //缺省构造函数,是必需的CStringm_name;WORDm_number;voidSerialize(CArchivearchive); //重载的Serialize函数//类的其它声明};voidCPerson::Serialize(CArchivearchive){

文档评论(0)

ning2021 + 关注
实名认证
文档贡献者

中医资格证持证人

该用户很懒,什么也没介绍

领域认证该用户于2023年05月10日上传了中医资格证

1亿VIP精品文档

相关文档