MFC - serializacja
Serializationto proces zapisywania lub odczytywania obiektu na lub z trwałego nośnika pamięci, takiego jak plik na dysku. Serializacja jest idealna w sytuacjach, w których pożądane jest utrzymanie stanu danych strukturalnych (takich jak klasy lub struktury C ++) w trakcie lub po wykonaniu programu.
Podczas przetwarzania plików wartości są zwykle typu pierwotnego (char, short, int, float lub double). W ten sam sposób możemy indywidualnie zapisywać wiele wartości, po jednej naraz. Ta technika nie obejmuje obiektu utworzonego na podstawie (jako zmiennej) klasy.
Biblioteka MFC ma wysoki poziom obsługi serializacji. Zaczyna się od klasy CObject, która jest przodkiem większości klas MFC, która jest wyposażona w funkcję składową Serialize ().
Spójrzmy na prosty przykład, tworząc nowy projekt MFC.
Step 1 - Usuń wiersz TODO i zaprojektuj okno dialogowe, jak pokazano na poniższej migawce.
Step 2- Dodaj zmienne wartości dla wszystkich kontrolek edycji. Dla wspomnianego Emp ID i Age typem wartości jest liczba całkowita, jak pokazano na poniższej migawce.
Step 3 - Dodaj procedurę obsługi zdarzeń dla obu przycisków.
Step 4- Dodajmy teraz prostą klasę Employee, którą musimy serializować. Oto deklaracja klasy Employee w pliku nagłówkowym.
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 - Oto definicja klasy Employee w pliku źródłowym (* .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 - Oto implementacja obsługi zdarzeń przycisku Zapisz.
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 - Oto implementacja obsługi zdarzeń przycisku 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 - Gdy powyższy kod zostanie skompilowany i wykonany, zobaczysz następujące dane wyjściowe.
Step 9 - Wprowadź informacje we wszystkich polach i kliknij Zapisz i zamknij ten program.
Step 10- Zapisuje dane. Uruchom aplikację ponownie i kliknij Otwórz. Załaduje informacje o pracowniku.