- 8
- 0
- 约1.44万字
- 约 25页
- 2015-10-16 发布于江苏
- 举报
使用 MFC 串行化数据和 C++ 对象作者:JerryZ
串行化数据 ——例子程序:Memo
创建一个新的单文档 SDI 应用,视图类选择 CFormView,以便用户可以在窗口中输入。 在界面中创建三个编辑框,然后再添加三个相应的编辑框变量。这三个变量是视图类的成员变量,为了交互数据,文档类中也要创建三个对应的变量。然后,文档类和视图类都要对数据成员进行初始化操作,在文档类中这个工作通常都在 OnNewDocument() 函数中进行。因为下面任何一个操作发生时都触发文档类 OnNewDocument()函数执行:
当用户启动应用程序;
当用户在“File”菜单中选择“New”选项;
视图类的初始化通常由 OnInitialUpdate() 负责,下面的任何一个操作发生时,代码都会触发视图类 OnInitialUpdate()函数执行 :
当用户启动应用程序;
当用户在“File”菜单中选择“New”选项;
当用户从“File”菜单中选择 “Open”选项;
在视图类中获得文档类指针的方法是:CFooDoc* pDoc = GerDocument();用此文档指针便可以操作文档类数据:m_ViewData = pDoc-m_DocData;
串行化的代码很简单,ar 是一个与用户选择的文件相对应的文档对象(CArchive 对象):
// CFooDoc 序列化
void CFooDoc::Serialize(CArchive ar)
{
if (ar.IsStoring())
{
// 将数据写入文件
ar m_DocData;
}
else
{
// 从文件中读取数据
ar m_DocData;
}
}
这样就将数据写入了文件,选择“File”菜单中的“Save”或者“Save as”即可完成数据的串行化。 如果没有保存数据,退出程序是会提示用户是否保存修改过的数据。具体细节请参考源代码。
串行化C++对象
——例子程序:PHN
创建一个新的单文档 SDI 应用,视图类选择 CFormView,以便可以有窗口中用户可以输入。
声明一个要串行化的 C++ 类。如 CPhone;
文档类的处理: 在文档类中声明一个 MFC CObList 类对象,这个类很有用,功能也很强,用它可以很轻松地维护 C++ 对象列表,例如 添加、删除列表元素等。在文档类的头文件中作如下声明:
CObList m_PhoneList;
上面的声明可以是 public 类型,这样其它类可以直接访问它。也可以是 private 类型,这样就必须声明一个公共的访问函数,比如:GetPhoneList(),这个函数能返回 m_PhoneList 的地址。
通常可以在文档类的 OnNewDocument()函数中进行数据初始化;
// Create a CPhone Object
CPhone* pPhone = new CPhone();
pPhone-m_Name = ;
pPhone-m_Phone = ;
// Add new object to the m_PhoneList list
m_PhoneList.AddHead(pPhone);
在此 CPhone 类的成员变量的初始化不是必须的,因为 CPhone 的构造函数已经完成了这个工作。AddHead()函数向 m_PhoneList 列表添加刚创建的 CPhone 对象。所以,无论什么时候创建新文档(如启动应用程序)都会向 m_PhoneList 列表中添加一个空的 CPhone 对象。注意类 CObList 的成员函数 AddHead() 是向列表的“头部”添加对象(列表的开始),所以参数是想要添加的对象的地址。
删除 m_PhoneList 列表中的内容
因为 m_PhoneList 是在内存中维护的,所以要随时维护,只要下面三个事件中的任何一个事件发生,都需要从内存中删除 m_PhoneList 列表中的对象:
用户退出应用程序;
用户开始一个新的文档,如从“File”菜单中选择“New”选项;
用户打开一个已存在的文档,如从“File”菜单中选择“Open”选项;
在文档类的头文件中声明删除操作的函数:
virtual void DeleteContents();
其实现如下:
// 删除列表中的所有项目并释放列表对象占用的内存
while ( ! m_PhoneList.IsEmpty() )
{
delete m_PhoneList.RemoveHead();
}
视图类处理:
声明视图类的数据成员:
POSITION m_position; // 在文档类列表中的当
您可能关注的文档
- IE浏览器控件安装与设置(ActiveX插件).doc
- illustrator工具 路径查找器.ppt
- Input and language learning.ppt
- i美股投资研报——美国茶叶零售商Teavana.docx
- Java学习网站文库.doc
- jghx-14+多原子分子习题.ppt
- juki---------YAMAHA.xls
- KEB科比变频器KEB LIFT调试说明.doc
- KJG-100污泥桨叶干燥.doc
- KPI考核体系(集团总部-战略发展中心).ppt
- 小区绿化施工协议书.docx
- 墙面施工协议书.docx
- 1 古诗二首(课件)--2025-2026学年统编版语文二年级下册.pptx
- (2026春新版)部编版八年级道德与法治下册《3.1《公民基本权利》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《4.3《依法履行义务》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.2《按劳分配为主体、多种分配方式并存》PPT课件.pptx
- (2026春新版)部编版八年级道德与法治下册《6.1《公有制为主体、多种所有制经济共同发展》PPT课件.pptx
- 初三教学管理交流发言稿.docx
- 小学生课外阅读总结.docx
- 餐饮门店夜经济运营的社会责任报告(夜间贡献)撰写流程试题库及答案.doc
原创力文档

文档评论(0)