程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> vc教程 >> 對話框中的序列化讀寫

對話框中的序列化讀寫

編輯:vc教程

大家知道序列化讀寫函數Serialize在文檔視圖的打開和關閉的時候能自動調用,對於數據的讀寫非常方便那在對話抗中能否同樣的利用這個Serialize函數呢?答案是肯定的。

比如我們可以重載Serialize函數如下
void CMyDiaryApp::Serialize(CArchive& ar)
{
    POSITION pos;
    Word nCount;

    if (ar.IsStoring())
    {    // storing code
        nCount = (Word) m_DiaryList.GetCount();
        ar << nCount;
        pos = m_DiaryList.GetHeadPosition();
        while(pos!=NULL)
        {
            CDiary * pDiary = m_DiaryList.GetNext(pos);
            ar << pDiary->m_date;
            nCount--;
        }
        ASSERT(nCount == 0);
    }
    else
    {    // loading code
        ar >> nCount;
        while(nCount--)
        {
            CDiary * pDiary = new CDiary;
            ar >> pDiary->m_date;
            m_DiaryList.AddTail(pDiary);
        }
    }
}
由於在對話框編輯中不會自動調用Serialize函數,於是可以自己編寫OnRead()和OnSave()函數來顯示的調用Serialize函數,從而達到合理的使用Serialize函數,重獲序列化讀寫模式給我們帶來的便捷,具體如下:
void CMyDiaryApp::OnRead()
{
    CFile file;
    if(file.Open("diary.dat",CFile::modeRead))
    {
        CArchive ar(&file,CArchive::load);
        Serialize(ar); // 調用 Serialize
        ar.Close();
        file.Close();
    }
}

void CMyDiaryApp::OnSave()
{
    CFile file;
    if(file.Open("diary.dat",CFile::modeCreate|CFile::modeWrite))
    {
        CArchive ar(&file,CArchive::store);
        Serialize(ar); // 調用 Serialize
        ar.Close();
        file.Close();
    }
}
然後對於 void CMyDiaryApp::OnSave()和 void CMyDiaryApp::OnRead()函數,我們在需要的時候可以隨意的使用,通過上述方式,我們就達到了我們的目的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved