大家知道序列化读写函数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()函数,我们在需要的时候可以随意的使用,通过上述方式,我们就达到了我们的目的  
说明:本教程来源互联网或网友上传或出版商,仅为学习研究或媒体推广,wanshiok.com不保证资料的完整性。
|