文档/视图结构中的文档对象

在文档/视图结构中,数据被保存在文档对象中。这里的“文档”是一切可以抽象出来的数据。MFC中,文档对象从CDocument类派生,CDocument是专门负责文档管理的类,其继承关系为

CObject->CCmdTarget->CDocument。其中常用的的类方法如下:

方法名作用
OnNewDocument在新文档被创建时被主结构调用
Serialize在读取文档或保存文档时被主结构调用
SetModifiedFlag设置文档已修改的标志,标志文档中是否有 没有保存的数据
UpdateAllViews更新所有视图

(1)OnNewDocument

函数原型:virtual BOOL OnNewDocument();

(2)Serialize

函数原型:virtual void Serialize(CArchive& ar);

ar是个序列化对象,可以将从CObject派生的类实例进行序列化操作。可以使用"<<"将数据序列化到磁盘中,或用">>"将磁盘中的数据序列化到对象中。所谓“序列化”就是“把对象内容存入一个文件或从一个文件中读取对象内容的过程”。

重写Serialize方法的代码如下:

void CMyDoc::Serialize(CArchive& ar)
{
  if(ar.IsStoring())
  {
      ar<<m_data; //将数据存入磁盘
  }
  else
  {
      ar>>m_data;//将数据读入对象
  }
}
首先调用ar的IsStoring判断当前序列化操作是存储数据还是读取数据。
(3)SetModifiedFlag

函数原型:virtual void SetModifiedFlag(BOOL bModified = TRUE);

既检查文件内容是否保存。当程序员编写修改文档数据代码时,后面应加上 SetModifiedFlag(TRUE),当成员变量bModified的值为真,表示已被修改。当用户单机保存时,MFC应用程序框架会自动把bModified 修改为假。

(4)UpdateAllViews

在MDI(多文档)程序中,CDocument类的成员变量m_viewList维护了一个指向CView对象的指针列表。如果一个文档对象的数据被改变了,那么与它关联的所有视图对象都应进行相应的更新。此时应调用UpdateAllViews方法,该方法遍历m_viewList列表,把所有视图进行更新。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值