- MFC教程
- MFC-首页
- MFC - 概述
- MFC - 环境设置
- MFC - VC++ 项目
- MFC - 入门
- MFC - Windows 基础知识
- MFC - 对话框
- MFC - Windows 资源
- MFC - 属性表
- MFC - 窗口布局
- MFC-控制管理
- MFC-Windows 控件
- MFC - 消息和事件
- MFC-Activex 控件
- MFC-文件系统
- MFC——标准I/O
- MFC - 文档视图
- MFC-字符串
- MFC-卡雷
- MFC - 链接列表
- MFC - 数据库类
- MFC-序列化
- MFC——多线程
- MFC-- 互联网编程
- MFC-GDI
- MFC - 库
- MFC 有用资源
- MFC - 快速指南
- MFC - 有用的资源
- MFC - 讨论
MFC-序列化
序列化是向持久存储介质(例如磁盘文件)写入或读取对象的过程。序列化非常适合需要在程序执行期间或之后维护结构化数据(例如 C++ 类或结构)的状态的情况。
执行文件处理时,值通常是基本类型(char、short、int、float 或 double)。以同样的方式,我们可以单独保存多个值,一次一个。此技术不包括从类(作为类的变量)创建的对象。
MFC 库对序列化具有高级别的支持。它从 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 - 这是“保存”按钮事件处理程序的实现。
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 - 这是“打开”按钮事件处理程序的实现。
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 - 它将保存数据。再次运行该应用程序并单击“打开”。它将加载员工信息。
