串行化處理
我們要串行化 CPhone 對象,把C++對象寫入文件,所以需要在 CPhone 類的定義和實現文件中加入相應的串行化代碼,首先要在 CPhone 頭文件中加入一個 MFC 宏,這是串行化需要的宏,必須爲它提供一個參數,也就是類的名字。
其次是聲明串行化函數,這個原型是必須的,因爲要串行化類 CPhone 對象列表,所以 CPhone 類必須有一個屬於自己的 Serialize()函數:
在 CPhone 實現文件中也要加入對應的代碼,這個宏也是串行化需要的另一個宏,它有三個參數,第一個是類名,第二個是基類名,第三個是應用程序的版本號,可以將版本號定義爲任何值,當串行化數據到文件時,此版本號也要寫入文件。
串行化函數 Serialize() 實現
這裏要注意的是爲了使用 CObList 類的成員函數 Serialize(),有幾個前提條件需要滿足: 列表類對象必須是 MFC CObject 類的派生類對象,也就是說 CPhone 類必須是 CObject 的派生類; 在列表中的對象類必須具備一個不帶參數的構造函數。如果需要,也可以有其它帶參數的構造函數; 必須聲明和實現列表類的串行化函數 Serialize(),即 CPhone::Serialize(); 實現列表對象的串行化必須使用 DECLARE_SERIAL/IMPLEMENT_SERIAL 宏; 調用列表 Serialize()函數 這一步是串行化列表 m_PhoneList,也就是調用 m_PhoneList 的成員函數 Serialize()。在什麼地方調用呢?記住,無論用戶什麼時候從“File”菜單中選擇“Save”或者“Save as”或“Open”選項,都將執行文檔類的 Serialize()函數,所以必須在文檔類的 Serialize()函數中調用 m_PhoneList 的 Serialize()函數。 這樣一來,無論用戶什麼時候從 File 菜單中選擇 Save/Save as 時,都將把 m_PhoneList 保存在用戶選擇的文件中,同樣地,無論用戶什麼時候從選擇 Open 時,都將把文件中保存的列表信息加載到 m_PhoneList 中來。m_PhoneList 的串行化調用如下:
只要在文檔類的 Serialize() 函數中調用上面這條語句時,必須把 ar 作爲參數傳入,它將完成需要串行化 m_PhoneList 列表數據的所有工作。不必在if語句中再做其它處理。 ——例子程序:ARCH 串行化處理有時並不需要用戶選擇文件,此時仍要從或向一個特定文件串行化數據,本部分將描述怎樣創建並定製一個 CArchive 對象。創建一個新的單文檔 SDI 應用, 工程名爲 ARCH。視圖類仍然選擇 CFormView。視圖中兩個編輯框和兩個按鈕,編輯框用於輸入數據,“Save to File”按鈕用於將輸入的數據串行化到文件,“Load from File”按鈕用於從文件中抽取數據。爲簡單起見,文件使用的硬編碼。 下面是 “Save to File”的操作代碼:
下面是 “Load from File”的操作代碼:
以上是三個 MFC 串行化數據的例子,Memo 程序的功能是串行化數據到文件,Phn 程序是串行化 C++ 對象列表到文件,而 ARCH 則是定製串行化。 |
使用 MFC 串行化數據和 C++ 對象(二)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.