术语 | CArchive::MapObject | ||
释义 | CArchive::MapObject void MapObject(const CObject* pOb); 参数:
说明: 调用此成员函数在映射中放置对象。此映射没有真的对文件串行化,但是对参考的子对象有效。举例来说,可能不想串行化一个文档,但是想对作为文档一部分的项串行化。通过调用MapObject,可允许那些项或子对象参考文档。而且,串行化子项还可以串行化它们的m_pDocument向后的指针。 当要把数据存储到CArchive对象和从它装载数据时,可以调用MapObject。在串行化和非串行化的过程中,MapObject向由CArchive保持的内部数据结构添加特定的对象,但是它不象ReadObject和WriteObject那样,它不会对对象串行化。 示例: //MyDoc.h //Document should have DECLEAR_SERIAL and IMPLEMENT_SERIAL class CMyDocument: public CDocument { CObList m_listOfSubItems; ... DECLARE_SERIAL(CMyDocument) }; //MyDoc.cpp ... IMPLEMENT_SERIAL(CMyDocument.CObject,1) ... void CMyDocument::Serialize(CArchive& ar) { if (ar.IsStoring( )) { //TODO:add storing code here } else { //TODO:add loading code here } ar.MapObject(this); //serialize the subitems in the documents; //they will be able to serialize their m_pDoc //back pointer m_listOfSubItems.Serialize(ar); } //SubItem.h class CSubItem:public CObject { public: CSubItem(CMYDocument * pdoc) { m_pDoc = pDoc } //back pointer to owning document CMYDocument* m_pDoc WORD m_I; //other item data virtual void Serialize(CArchive& ar); }; //SubItem.cpp void CSubItem:Serialize(CArchive& ar) { if (ar.IsStoring( )) { //will serializing a reference //to the “mapped”document pointer ar < else { //will load a reference to //the “mapped”document pointer ar >>m_pDoc; ar >>m_i; } } 请参阅:CArchive::ReadObject, CArchive::WriteObject |
||
随便看 |
|
MFC类库中文详解手册包含4274条MFC类库参考词条,基本涵盖了Microsoft基本类库中的类、全局函数、全局变量和宏的内容,是计算机编程的有利工具。