На этом шаге мы рассмотрим пример сериализации данных в приложении.
На 52 шаге мы создали в приложении МуАрр две переменные-члена: CMyAppDoc::m_nLines и CMyAppDoc::m_string. Теперь напишем дополнительный код, сериализующий их в файл документа.
void СМуАрр::Serialize(CArchive& ar) { if (ar. IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } }
Рис.1. Код функции Serialize()
void CMyAppDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { ar << m_nLines; ar << m_string; } else { аr >> m_nLines; аr >> m_string; } }
Рис.2. Код измененной функции Serialize()
SetModifiedFlag();
Таким образом, вся функция будет выглядеть так:
void CMyAppDoc::OnDataEdit() { CEditDataDialog aDlg; aDlg.m_nLines = m_nLines; aDlg.m_strLineText = m_string; if (aDlg.DoModal()) { m_nLines = aDlg.m_nLines; m_string = aDlg.m_strLineText; UpdateAllViews(NULL); SetModifiedFlag(); } }
Рис.3. Код измененной функции OnDataEdit()
Функция CDocument::SetModifiedFlag() вызывается для уведомления каркаса приложения о том, что данные приложения были изменены. В дальнейшем перед закрытием документа это заставит каркас запросить пользователя о сохранении изменений.
m_nLines = 0; m_string = "";
Рис.4. Перегруженная функция CDocument::DeleteContents()
Таким образом, вся функция будет выглядеть так:
void CMyAppDoc::DeleteContents()
{
m_nLines = 0;
m_string = "";
CDocument::DeleteContents();
}
В отличие от MDI-приложений, создающих отдельный объект документа для каждого создаваемого документа или открываемого файла, SDI-приложения формируют только один объект и используют его для таких операций многократно. Перед повторным применением объекта функция DeleteContents() удаляет из него данные. Разрабатывая SDI-приложение, Вы обязаны реализовать DeleteContents() - функцию, обнуляющую (или присваивающую значение NULL) все члены-данные. Иначе в текущем документе Вы увидите данные, оставшиеся от предыдущих сеансов работы приложения.
Текст измененного приложения можно взять здесь (144,7 Кб).
На следующем шаге мы рассмотрим поддержку сериализации.