MFC - Serialization
Serializationlà quá trình ghi hoặc đọc một đối tượng đến hoặc từ một phương tiện lưu trữ liên tục như tệp đĩa. Tuần tự hóa là lý tưởng cho các tình huống muốn duy trì trạng thái của dữ liệu có cấu trúc (chẳng hạn như các lớp hoặc cấu trúc C ++) trong hoặc sau khi thực hiện một chương trình.
Khi thực hiện xử lý tệp, các giá trị thường có kiểu nguyên thủy (char, short, int, float hoặc double). Theo cách tương tự, chúng ta có thể lưu riêng lẻ nhiều giá trị tại một thời điểm. Kỹ thuật này không bao gồm một đối tượng được tạo từ (như một biến của) một lớp.
Thư viện MFC có mức độ hỗ trợ cao cho việc tuần tự hóa. Nó bắt đầu với lớp CObject là tổ tiên của hầu hết các lớp MFC, được trang bị hàm thành viên Serialize ().
Chúng ta hãy xem xét một ví dụ đơn giản bằng cách tạo một dự án MFC mới.
Step 1 - Loại bỏ dòng TODO và thiết kế hộp thoại của bạn như thể hiện trong ảnh chụp nhanh sau.
Step 2- Thêm các biến giá trị cho tất cả các điều khiển chỉnh sửa. Đối với Emp ID và Age được đề cập, loại giá trị là một số nguyên như được hiển thị trong ảnh chụp nhanh sau.
Step 3 - Thêm trình xử lý sự kiện cho cả hai nút.
Step 4- Bây giờ chúng ta hãy thêm một lớp Nhân viên đơn giản, mà chúng ta cần phải tuần tự hóa. Đây là phần khai báo của lớp Employee trong tệp tiêu đề.
class CEmployee : public CObject {
public:
int empID;
CString empName;
int age;
CEmployee(void);
~CEmployee(void);
private:
public:
void Serialize(CArchive& ar);
DECLARE_SERIAL(CEmployee);
};
Step 5 - Đây là định nghĩa của lớp Nhân viên trong tệp nguồn (* .cpp).
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;
}
Step 6 - Đây là phần thực hiện xử lý sự kiện nút Lưu.
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();
}
Step 7 - Đây là phần thực hiện của Open button event handler.
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);
}
Step 8 - Khi đoạn mã trên được biên dịch và thực thi, bạn sẽ thấy kết quả như sau.
Step 9 - Nhập thông tin vào tất cả các trường và nhấp vào Lưu và đóng chương trình này.
Step 10- Nó sẽ lưu dữ liệu. Chạy lại ứng dụng và nhấp vào mở. Nó sẽ tải thông tin Nhân viên.