(生死不明猫新人)
CArchive类实现将对象数据保存到永久设备上称之为串行化(二进制流)
使用说明:必须先新建CFile或其派生类后创建CArchive类对象,二者的打开方式等必须一致,一个文件只能和一个CArchive类关联
同时支持CObject类及派生对象
CArchive类构造函数: CArchive(文件对象指针,加载还是保存,缓存区大小,指定内存?);
文件写入: 构建文件对象 CFile file(...)
>构建串行对象 CArchive ar(&file,...)
>定义数据 int i = 4;char ch='a';
>分别通过“<<”写入: ar<<i<<ch;
文件读取: 构建文件对象 CFile file(...)
>构建串行对象 CArchive ar(&file,...)
>定义数据 int i;char ch;
>分别通过“>>”读取: ar>>i>>ch; 顺序一致,通过格式区分
>数据处理显示
文档字符串: IDR_MAINFRAME 通过GetDocString(返回值,查找索引)获取字符串
(顺序排列)主窗口标题/文档默认标题/文档类型名(对话框显示)/过滤器/扩展名(组合使用)/。。/
文件/新建: MFC提供文档/视类结构中,每一份文档产生时,会产生文档类对象、框架类对象和视类对象服务文档
新建按钮对应响应函数封装在MFC架构中,调用XDoc::OnNewDocument()函数,同时程序界面出现前也调用一次该函数
首先创建文档对象,再创建框架类对象,同时创建视类对象,框架和视类对象创建同时创建其窗口
MFC架构文档: 文档类负责数据管理(保存、加载),视类负责数据编辑修改。
文件/保存;打开: XDoc::Serialize()在保存或加载按钮触发后会执行该函数,根据当前状态选择保存(if)和加载(else)
文件/打开: CWinApp::OnFileOpen > CDocManager::OnFileOpen(该函数中调用文件打开对话框) > X::DoPromptFileName跳转
> CSingDocument::OpenDocument > CDocument::OpenDocument(构造CFile对象;构造CArchive对象,调用Serialize)
> 衍生XDoc::Serialize() 因为函数间跳转通过指针实现,所以不会有同一个文件二次打开情况
文件/保存: 同上类似,响应函数在CWinApp中。
CWinApp: 管理文档管理器 > 文档管理器指针 m_pDocmanange
CDocmanager: 文档管理器:管理文档模板 > 文档模板列表指针 m_templateList
CSingDocTemplate:文档模板:管理文档类、框架类、视类
CDocument: 文档类
类串行化: 以画图工程为例:画图工程中有一个CGraph类作为画图数据存放(每个图形的画图动作)
该类要求:1、基类必须为CObject,2、该类中重写Serizlize成员函数,3、定义不带参构造函数
4、DECLARE_SERIAL(ClassName)头文件中定义,5、IMPLEMENT_SERIAL(ClassName,BaseClassName,Version) 源文件开始定义
其中4和5实现类的序列化,作为串行化的基本条件
画图工程中通过画图操作完成的图形绘制需要保存,采用CObject派生的CObArray类来实现保存(CGraph类中创建对象)
该类类似链表操作,添加元素采用OBject指针实现Add(),保存内容根据画图需要为(起点,终点,图形类型)
通过文档类存取保存的对象