保存对话框状态
如何在声明一个对话框对象后读取上次保存在系统中的该对话框状态(保存在一个自定义的文件中,这里我不想用INI或注册表的方式),在关闭对话框的时候自动保存当前对话框的状态(对话框对象中的变量)。
其他的信息如下:
//class CRADDLG : public CDialog
CRADDLG raddlg;
//我希望在这里读取到上次对话框的状态
raddlg.DoModal();
//当关闭对话框的时候我希望系统能够保存对话框状态,如对话框对象中各个变量的值。
我目前的考虑是用CFile和CArchive来保存。按道理CDialog类是继承CObject的,所以是按道理是可以串行化整个类的,但是暂时还没有成功。
以下是目前的代码,不知道有什么问题,请指教。
CRADDLG raddlg;
CFile file;
file.Open(_T("rad.cfg"),CFile::modeReadWrite|);
CArchive ar(&file,CArchive::load);
raddlg.Serialize(ar);
ar.Close();
raddlg.DoModal();
CArchive ar1(&file,CArchive::store);
raddlg.Serialize(ar1);
ar1.Close();
file.Close();
问题点数:50、回复次数:7Top
1 楼xuzheng318(忧郁王子)回复于 2005-01-07 17:57:34 得分 5
1楼帮你up!Top
2 楼fengqinggao(风清高)回复于 2005-01-07 18:18:55 得分 35
这样做不太现实吧,这些语句理论上没错,实际应该是不行的,Serialize函数就算可以这么用,它保存的东西也肯定不是你想要的。
我的想法是:
1、在OnDestroy()函数中,将一些数据和状态变量,分别保存到文件的指定位置(也就是你自定义的格式了),例如一个CEdit的数据,可以将它的字符串保存起来,一个单选框可以将其是否选中的状态数据保存起来;
2、在OnInitDialog()函数中,从你的文件按固定(自定义)的格式读出每个控件的状态数据,并且赋值,这样就达到目的了。
如果你想在对话框DoModal()前初始化,那就只能初始化控件数据,不能用控件的句柄初始化
方法和楼主的大相径庭,如果楼主的方法可行,那的确比较简单,我的就仅供参考了,:)Top
3 楼csdn_cht(欣欣兽)回复于 2005-01-07 18:27:32 得分 5
这段代码没有问题,你的serialize()和对话框的变量初始化有没有问题?Top
4 楼chuanke((C ) 2005【空间代数】. All rights reserved .)回复于 2005-01-08 14:12:11 得分 5
学习Top
5 楼kikyang(紫辰)回复于 2005-01-10 10:15:39 得分 0
现在的问题是对话框类不知道怎么就不支持默认的构造函数(什么参数都没有,内容也是空的),如果手工加上了这样的构造函数,CRADDLG raddlg;这里就会出问题。
希望有高人实际试验一下,指点一下。Top
6 楼kikyang(紫辰)回复于 2005-01-10 10:21:46 得分 0
回:fengqinggao(风清高)
Serialize函数肯定是要根据自己的要求重载的,其实我们的方法也不是大相径庭,只是实现的位置有所区别罢了。Top
7 楼kikyang(紫辰)回复于 2005-01-25 17:29:44 得分 0
最后基本用的是 fengqinggao(风清高)类似的方法,看来问题也没有什么更好的解决办法了,结帖了,谢谢各位.Top




