序列化是向或从磁盘文件之类的持久性存储介质写入或读取对象的过程,对于需要在程序执行期间或之后保持结构化数据(如C ++类或结构)的状态的情况,串行化是理想的选择。
MFC库高度支持序列化,它从CObject类开始,而CObject类是大多数MFC类的父类,它配备了Serialize()成员函数。
让无涯教程通过创建一个新的MFC项目来研究一个简单的示例。
步骤1 - 删除TODO行并设计对话框,如以下快照所示。
步骤2 - 为所有编辑控件添加值变量。对于提到的Emp ID和Age,值类型是一个整数,如以下快照所示。
步骤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 - 编译并执行上述代码后,您将看到以下输出。
步骤9 - 输入中的所有字段的信息,然后点击保存并关闭该程序。
步骤10 - 它将保存数据。再次运行该应用程序,然后单击"Open"。它将加载员工信息。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)