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

在文档/视图结构中,数据被保存在文档对象中。这里的“文档”是一切可以抽象出来的数据。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列表,把所有视图进行更新。



你可能感兴趣的:(文档,mfc)