Лекция: Файловая обработка объектов класса MFC
Сериализация – это процесс сохранения и загрузки данных с диска. В VC++ имеются встроенные средства управления файлами, обеспечивающие автоматизацию сериализации собственных типов данных. Созданное с помощью AppWizard приложения имеют встроенное меню File с командами New, Open, Save as.
Функции-обработчики команд меню File сначала открывают файл, а затем вызывают элемент-функцию Serialize() класса документа приложения. Эта функция и выполняет чтение и запись данных. Пример:
void Clab4_1Doc::Serialize (CArchive& ar)
{
if (ar.IsStoring()) // cохранение (запись на диск)
{// добавить код сохранения
ar<< DataObject;
}
else
{// добавить код загрузки
ar>> DataObject;
}
}
Функция принимает ссылку на объект класса CArchive. Класс CArchive осуществляет передачу документов в архив и обратно.
Функции базового ввода-вывода класса CArchive:
— UINT Read(void* lpBuf, UINT nMax); //чтение с диска
— void Write(const void* lpBuf, UINT nMax); //запись на диск
— операторы <<,>>. //операторы записи и чтения;
— Bool ReadString(CString& pString); //чтение строки
— Bool WriteString(CString& pString); //запись строки
— GetFile(); //статус
— IsLoading(); //проверка загрузки: не 0 — хорошо; 0 — плохо
— IsStoring(); //проверка сохранения: не 0 — хорошо; 0 — плохо
Элемент-функция IsStoring () класса CArchive возвращает true, если файл открыт на запись, и false, если файл открыт на чтение.
Функция Serialize () может записывать и читать с помощью операций вставки << и извлечения >> данные, имеющие базовые типы данных: int, float, double, BYTE, WORD, LONG, DWORD.
Итак, для сериализации объектов классов MFC необходимо выполнить следующие операции:
— Создание элементов-данных класса документа.
— Инициализация этих элементов-данных в функциях класса документа OnNewDocument () и в конструкторе.
— Организация отображения документа в функции OnDraw.
— Включение элементов-функций класса представления, обеспечивающих редактирование документа.
— Добавление кода функции Serialize ().
Цель работы — чтение и запись с диска стандартных объектов MFC; работа команд меню File (лаб. работа lab4_1 – [7, c.41]).
Для создания приложения необходимо выполнить следующие операции:
— добавление элементов-данных класса документа, которые будут записываться и читаться с диска;
— инициализация этих элементов-данных в функции OnNewDocument() класса документа и в конструкторе документа;
— ввод данных с клавиатуры, если это необходимо, например, в функции OnChar() для ввода символов строки;
— организация вывода документа (функция OnDraw());
— включение в класс вида функций редактирования;
— модернизация функции Serialize() т.е. включение операторов, обеспечивающих сохранение (Save) и загрузку (Open) данных, которые представляют собой содержание документа.
Для создания приложения lab4_1 выполнить этапы:
— создание проекта lab4_1 (SDI-приложение),
— добавление элемента — данного класса документа,
— инициализация элемента-данного в конструкторе
класса и в OnNewDocument(),
— ввод данных с клавиатуры,
— вывод текущего состояния документа,
— сообщение приложению об изменении данных,
— модификация функции Serialize().
Скомпилировать, запустить и протестировать приложение.