1使用CArchive类对文件进行读写操作
CArchive是MFC提供的,没有基类。
一般来说,一个对象被构造,就存活在内存中,当生命周期结束后,该对象被销毁。
CArchive类就可以将对象数据永久保存在磁盘中,即使程序关闭,重启之后也可以从磁盘文件中读取对象数据,然后再内存中重写构造相应的对象。
让对象数据持久性的过程就称为窜行化(或者称为序列化)。
CFile file("1.txt",CFile::modeCreate|CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=4;
char ch='a';
float f = 1.3f;
CString str("hjf");
ar<<i<<ch<<f<<str;
CFile file("1.txt",CFile::Read());
CArchive ar(&file,CArchive::load);
int i;
char ch;
float f ;
CString str;
CString strResult;
ar>>i>>ch>>f>>str;
strResult.Format("%d","%c","%f","%s",i,ch,f,str);
MessageBox(strResult);
2 MFC框架提供的文件新建功能
使用OnNewDocument函数来新建文档,该函数本身是虚函数
可以再该函数内设置文档标题,
2.1 IDR_MAINFRAME字符串资源
文档标题也可以在这里修改
IDR_MAINFRAME字符串资源通过CGraphicApp类中的InitInstance函数传递到程序框架上
2.2 OnNewDocument函数的调用过程
CWinApp::OnFileNew-->CDocManager::OnFileNew-->CSingleDocTemplate::OpenDocumentFile-->CGraphicDoc::OnNewDocument
3 文档窜行化
3.1 文档类的Serialize函数
Serialize函数有一个CArchive引用类型的参数;通过这个参数来保存或加载数据
3.2 MFC框架对Serialize函数的调用过程
CWinApp::OnFileNew-->CDocManager::OnFileNew-->CWin App::OpenDocumentFile-->CDocManager::OpenDocumentFile-->CSingleDocTemplate::OpenDocumentFile-->CDocument::OnOpenDocument-->CGraphicDoc::Serialize
4 可窜行化的类
4.1 实现类对窜行化的支持
一个可窜行化的类一般都有一个Serialize成员函数
要使一个类可窜行化,可以通过五个步骤:
1从CObject派生类
修改类的定义,让类成为CObject的子类
2重写Serialize成员函数
在头文件中增加该函数的声明,并在源文件中实现这个函数
3使用DECLARE_SERIAL宏
在头文件中声明即可
4定义不带参数的构造函数
5在类的实现文件中使用IMPLEMENT_SERIAL宏
4.2 利用可窜行化类的Serialize函数保存和加载对象