1.CArchive
保存时的代码
(1)保存
CFile file("1.txt",CFile::modeCreate | CFile::modeWrite);
CArchive ar(&file,CArchive::store);
int i=4;
char ch='a';
float f=1.3f;//c/c++中,浮点数在默认情况下被定义为double类型,如果希望指定为float类型,需要在该数值后面加上字母f
CString str("http://www.sunxin.org");
ar<<i<<ch<<f<<str;
//保存
(2)打开
CFile file("1.txt",CFile::modeCreate | CFile::modeRead);
CArchive ar(&file,CArchive::store);
int i;
char ch;
float f;//c/c++中,浮点数在默认情况下被定义为double类型,如果希望指定为float类型,需要在该数值后面加上字母f
CString str;
ar>>i
>>
ch
>>
f
>>
str;
//打开,注意:对象提取的顺序跟保存的顺序必须保持一致
2.
文档
-
视类结构简介
在CDocument类中通过SetTitle函数来修改文档的标题。
OnNewDocument
在程序启动时被调用,此时可设置文档标题,也可以在 String Table的IDR_MAINFRAME 的第二个 "\n"后改变文档的标题。须了解的 7个字符串的用途,见PPT。
另外,一个资源ID可以表示多种资源,例如IDR_MAINFRAME可以表示字符串资源,菜单,图标等资源,如下。
在WinAPP的 InitInstance()中完成DOC,View,MainFrame的归一。
当点击系统的打开和新建菜单时,有一系列的步骤,孙鑫老师给我们跟踪了代码的调用过程,此段跟踪我们略过。但我们要牢记住: CWinAPP负责管理文档管理器,文档管理器有一个指针链表,且来保存文档模板的指针,文档模板指针管理三个类 DOC,VIEW ,MAINFRAME,使其为某文件对象服务。
3.
利用
CArchive
来保存一个类的对象,此类必须支持串行化,需要 5个步骤。
a.
让类从
CObject
派生;
b.
覆盖
Serialize()
函数,在其中完成保存和读取功能;
c.
在
.h
中加入 DECLARE_SERIAL(CGraph);
d.
在。
cpp
中加入IMPLEMENT_SERIAL(CGraph, CObject, 1 );//第三个参数是一个版本号
e.
定义一个不带参数的构造函数。
保存绘画数据到文件的简单过程(串行化)
a.
在
CGraph
中增加一个画图的成员函数,其实不增加也行。可以在 View中完成相应功能。
b.
增加四个画图菜单,菜单可以从
11课的代码中拷贝。
c.
在
View
中增加LButtonDown和 UP的响应,在UP中画图,在 DOWN中保存点
d.
利用
CObArray
集合类来保存绘画数据
e.
在
CGraphicDOC::Serialize()
中保存和读取数据
f.
然后在
OnDraw
中重绘。
4.
新建和打开文档时,要注意销毁原来的数据。在
DOC的DeleteContents 虚函数中是好时机。代码如下
int nCount;
(1)方法1
nCount=m_obArray.GetSize();
/*for(int i=0;i<nCount;i++)
{
delete m_obArray.GetAt(i);//
释放指针指向的内存空间
}
m_obArray.RemoveAll();*/
(2)方法2
while(nCount--)
{
delete m_obArray.GetAt(nCount);
m_obArray.RemoveAt(nCount);
}