MFC - Сериализация
Serializationэто процесс записи или чтения объекта на постоянный носитель данных, например дисковый файл, или с него. Сериализация идеальна для ситуаций, когда желательно поддерживать состояние структурированных данных (таких как классы или структуры C ++) во время или после выполнения программы.
При обработке файла значения обычно имеют примитивные типы (char, short, int, float или double). Таким же образом мы можем индивидуально сохранять множество значений по одному. Этот метод не включает объект, созданный из (в качестве переменной) класса.
Библиотека MFC имеет высокий уровень поддержки сериализации. Он начинается с класса CObject, который является предком большинства классов MFC, который оснащен функцией-членом Serialize ().
Давайте рассмотрим простой пример, создав новый проект MFC.
Step 1 - Удалите строку TODO и создайте диалоговое окно, как показано на следующем снимке.
Step 2- Добавить переменные значения для всех элементов управления редактированием. Для упомянутых Emp ID и Age тип значения является целым числом, как показано на следующем снимке.
Step 3 - Добавьте обработчик событий для обеих кнопок.
Step 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);
};
Step 5 - Вот определение класса Employee в исходном (* .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 - Вот реализация обработчика события кнопки «Сохранить».
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 - Вот реализация обработчика события кнопки 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);
}
Step 8 - Когда приведенный выше код скомпилирован и выполнен, вы увидите следующий результат.
Step 9 - Введите информацию во все поля, нажмите «Сохранить» и закройте эту программу.
Step 10- Это сохранит данные. Снова запустите приложение и нажмите «Открыть». Он загрузит информацию о сотруднике.