友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

深入浅出MFC第2版(PDF格式)-第182章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!






      诲。然而,Microsoft 很有可能改变CObject::Serialize  的内容,届时没有遵循告诲的人 



      恐怕就后悔了。 



CArchive 类别 



      谈到Serialize 就不能不谈CArchive,因为serialize 的对象(无论读或写)是一个 



      CArchive 对象,这一点相信你已经从上面数节讨论中熟悉了。基本上你可以想象archive 



      相当于文件,不过它其实是文件之前的一个内存缓冲区。所以我们才会在前面的「台 



      面下的Serialize 奥秘」中看到这样的动作: 



      BOOL CDocument::OnSaveDocument(LPCTSTR lpszPathName) 



      { 



           CFile* pFile = NULL; 



           pFile = GetFile(lpszPathName; CFile::modeCreate | 



                 CFile::modeReadWrite | CFile::shareExclusive; &fe); 



           // 令file 和archive 产生关联 



                                                                                 531 


…………………………………………………………Page 594……………………………………………………………

                   第篇    深入  MFC  程式設計 



                       CArchive saveArchive(pFile; CArchive::store | 

                                                CArchive::bNoFlushOnDelete); 

                       。。。 

                       Serialize(saveArchive);    //对着 archive 做serialize 动作 

                       。。。 

                       saveArchive。Close(); 

                       ReleaseFile(pFile; FALSE); 

                    } 



                   BOOL CDocument::OnOpenDocument(LPCTSTR lpszPathName) 

                    { 

                       CFile* pFile = GetFile(lpszPathName; 

                                                  CFile::modeRead|CFile::shareDenyWrite; &fe); 



                       // 令file 和archive 产生关联 

                       CArchive loadArchive(pFile; CArchive::load | 

                                              CArchive::bNoFlushOnDelete); 

                       。。。 

                       Serialize(loadArchive);    // 对着archive 做serialize 动作 

                       。。。 

                       loadArchive。Close(); 

                       ReleaseFile(pFile; FALSE); 

                    } 



             operator》 



                   CArchive 针对许多C++ 数据类型、Windows 数据类型以及CObject 衍生类别,定义 



                   operator》 多载运算子: 



                    // in AFX。H 

                    class CArchive 

                    { 

                   public: 

                    // Flag values 

                           enum Mode { store = 0; load = 1; bNoFlushOnDelete = 2; bNoByteSwap = 4 }; 

                           CArchive(CFile* pFile; UINT nMode; int nBufSize = 4096; void* lpBuf = NULL); 

                           ~CArchive(); 



                    // Attributes 

                           BOOL IsLoading() const; 

                           BOOL IsStoring() const; 

                           BOOL IsByteSwapping() const; 

                           BOOL IsBufferEmpty() const; 



                           CFile* GetFile() const; 



532 


…………………………………………………………Page 595……………………………………………………………

                                                  第8章    Document…View  深入探討 



        UINT GetObjectSchema(); // only valid when reading a CObject* 

        void SetObjectSchema(UINT nSchema); 



        // pointer to document being serialized …must set to serialize 

        //  COleClientItems in a document! 

        CDocument* m_pDocument; 



// Operations 

        UINT Read(void* lpBuf; UINT nMax); 

        void Write(const void* lpBuf; UINT nMax); 

        void Flush(); 

        void Close(); 

        void Abort();   // close and shutdown without exceptions 



        // reading and writing strings 

        void WriteString(LPCTSTR lpsz); 

        LPTSTR ReadString(LPTSTR lpsz; UINT nMax); 

        BOOL ReadString(CString& rString); 



public: 

        // Object I/O is pointer based to avoid added construction overhead。 

        // Use the Serialize member function directly for embedded objects。 

        friend CArchive& AFXAPI operator(CArchive& ar; CObject*& pOb); 

        friend CArchive& AFXAPI operator》》(CArchive& ar; const CObject*& pOb); 



        // insertion operations 

        CArchive& operator(unsigned& u); 



                             // object read/write 

                             CObject* ReadObject(const CRuntimeClass* pClass); 

                             void WriteObject(const CObject* pOb); 

                             // advanced object mapping (used for forced references) 

                             void MapObject(const CObject* pOb); 



                             // advanced versioning support 

                             void WriteClass(const CRuntimeClass* pClassRef); 

    
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!