现在的位置: 首页 > 综合 > 正文

孙鑫VC学习笔记:第十三讲 (五) 保存可串行化的类对象 如何获取文档与视类指针

2013年04月07日 ⁄ 综合 ⁄ 共 1643字 ⁄ 字号 评论关闭

如何获取视类指针:
1.首先要获得第一个视类对象在视类对象列表中的位置,用GetFirstViewPosition方法
virtual POSITION GetFirstViewPosition( ) const;
 A POSITION value that can be used for iteration with the GetNextView member function.
  POSITION   A value used to denote the position of an element in a collection; used by
  MFC collection classes.(用来表示一个值在集合中元素的位置,为MDC的集合类所使用)
 Call this function to get the position of the first view in the list of views associated with the document.
 
2.然后通过GetNextView当前位置视类对象的指针
注:单文档类只有一个视类对象
 一个文档类对象能和多个视类对象相关,一个视类对象只和一个文档类对象相关.
---------------------------------------------------------------------------------
在CGraphicDoc::Serialize方法中
使用CArchive对象保存可串行化的类对象

要在文档类中访问定义在视类中的对象,
首先要获得第一个视类对象在视类对象列表中的位置,需要用到函数CDocument::GetFirstViewPosition,
然后通过GetNextView当前位置视类对象的指针.

---------------------------------------------------------------------------------

文档类中调用Serialize保存一个可串行化的CGraph类的对象时,实际上是调用了CGraph类的
对象本身的Serialize函数完成各成员数据的保存,这个调用过程由框架自动完成,
所以对象本身的Serialize方法中,设定保存该对象时需要保存那些成员,
这些工作在你编写可串行化的类时去确定.
---------------------------------------------------------------------------------
在CObArray::Serialize方法中
使用CArchive对象保存可串行化的类对象
m_obArray由CObArray继承而来,CObArray本身支持可串行化,
所以我们可以直接调用该对象的Serialize方法保存对象数据

---------------------------------------------------------------------------------
CObArray本身支持可串行化,我们也可以在文档类中定义一个 CObArray对象 m_obArray,
然后在View中调用该对象的Add方法实现对象的保存。这样就可以不用在CDocument类中
的Serialize方法中再写保存数据的代码了。
1.在文档类中定义一个CObArray 变量
 CObArray m_obArray;
2.在View中可以这样调用m_obArray
3.在CGraphicDoc::Serialize方法中,
 CGraphicDoc *pDoc=GetDocument();
 pDoc->m_obArray.Add(pGraph);
 

---------------------------------------------------------------------------------

如何获取文档类的指针?
我们在View类中发现有一个GetDocument()方法,这个方法返回值就是一个文档类指针,
可以用这个方法直接获得文档类指针。


 

抱歉!评论已关闭.