MFC - 序列化

MFC - 序列化 首页 / MFC入门教程 / MFC - 序列化

序列化是向或从磁盘文件之类的持久性存储介质写入或读取对象的过程,对于需要在程序执行期间或之后保持结构化数据(如C ++类或结构)的状态的情况,串行化是理想的选择。

MFC库高度支持序列化,它从CObject类开始,而CObject类是大多数MFC类的父类,它配备了Serialize()成员函数。

让无涯教程通过创建一个新的MFC项目来研究一个简单的示例。

步骤1 - 删除TODO行并设计对话框,如以下快照所示。

Remove TODO Line

步骤2 - 为所有编辑控件添加值变量。对于提到的Emp ID和Age,值类型是一个整数,如以下快照所示。

Serialization Add Var

步骤3 - 为两个按钮添加事件处理程序。

步骤4 - 现在让无涯教程添加一个简单的Employee类,需要对其进行序列化,这是头文件中Employee类的声明。

class CEmployee : public CObject {
   public:
      int empID;
      CString empName;
      int age;
      CEmployee(void);
      ~CEmployee(void);
   private:

   public:
      void Serialize(CArchive& ar);
      DECLARE_SERIAL(CEmployee);
};

步骤5 - 这是源(* .cpp)文件中Employee类的定义。

IMPLEMENT_SERIAL(CEmployee, CObject, 0)
CEmployee::CEmployee(void) {

}

CEmployee::~CEmployee(void) {

}

void CEmployee::Serialize(CArchive& ar) {
   CObject::Serialize(ar);

   if (ar.IsStoring())
      ar << empID << empName << age;
   else
      ar >> empID >> empName >> age;
}

步骤6 - 这是"Save"按钮事件处理程序的实现。

void CMFCSerializationDlg::OnBnClickedButtonSave() {
   //TODO: Add your control notification handler code here
   UpdateData(TRUE);
   CEmployee employee;
   CFile file;
   file.Open(L"EmployeeInfo.hse", CFile::modeCreate | CFile::modeWrite);
   CArchive ar(&file, CArchive::store);
   employee.empID = m_id;
   employee.empName = m_strName;
   employee.age = m_age;
   employee.Serialize(ar);
   ar.Close();
}

步骤7 - 这是"Open"按钮事件处理程序的实现。

void CMFCSerializationDlg::OnBnClickedButtonOpen() {
   //TODO: Add your control notification handler code here
   UpdateData(TRUE);

   CFile file;

   file.Open(L"EmployeeInfo.hse", CFile::modeRead);
   CArchive ar(&file, CArchive::load);
   CEmployee employee;

   employee.Serialize(ar);

   m_id = employee.empID;
   m_strName = employee.empName;
   m_age = employee.age;
   ar.Close();
   file.Close();

   UpdateData(FALSE);
}

步骤8 - 编译并执行上述代码后,您将看到以下输出。

Serialization Result

步骤9 - 输入中的所有字段的信息,然后点击保存并关闭该程序。

Serialization Insert Info

步骤10 - 它将保存数据。再次运行该应用程序,然后单击"Open"。它将加载员工信息。

Serialization Save Info

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

微服务架构核心20讲 -〔杨波〕

从0开始学微服务 -〔胡忠想〕

10x程序员工作法 -〔郑晔〕

玩转Spring全家桶 -〔丁雪丰〕

深入拆解Tomcat & Jetty -〔李号双〕

系统性能调优必知必会 -〔陶辉〕

全链路压测实战30讲 -〔高楼〕

朱涛 · Kotlin编程第一课 -〔朱涛〕

LangChain 实战课 -〔黄佳〕

好记忆不如烂笔头。留下您的足迹吧 :)