Одним из наиболее впечатляющих моментов архитектуры создания и просмотра документов является простота, с которой можно сохранять документы на диске и загружать их оттуда. Это объясняется двумя обстоятельствами. Во-первых, класс CObject содержит функцию Serialize(), которая автоматически вызывается при сохранении или загрузке документа. Во-вторых, в MFC определен класс CArchive, предназначенный для автоматизации почти всех функции работы с файлами. В классе CArchive содержатся перегруженные версии операторов ввода-вывода << и >> предназначенные для работы как со стандартными типами данных, так и с типами классов, определенных в иерархии MFC. Механизм, обеспечивающий хранение документов, в архитектуре создания и просмотра документов называется идентификацией.
Функция CObject::Serialize() вызывается при загрузке или сохранении документа. Ее прототип таков:
virtual void CObject::Serialize(CArchive &ArcOb);
Здесь параметр ArcOb является объектом типа CArchive, определяющим поток архивирования данных. Функция Serialize() должна переопределяться в классе доку¬мента. Пользовательская функция должна записывать и читать документ из архивного потока, определяемого параметром ArcOb. Поскольку функция Serialize() вызывается как при сохранении, так и при загрузке документа, должен существовать способ различать обе ситуации. Для этого используются функции IsStoring() и IsLoading(), являющиеся членами класса CArchive. Прототипы этих функций следующие:
BOOL CArchive::IsLoading() const;
BOOL CArchive::IaStoring() const;
Функция IsLoading() возвращает ненулевое значение, если документ загружается. и ноль, если документ сохраняется. С другой стороны, функции IsStoring() возвращает ненулевое значение при сохранении документа, а при его загрузке — ноль. При записи и сохранении документа внутри функции Serialize() необходимо использовать операторы << и >>. В качестве левого операнда этих операции (т.е.
стоящего слева от оператора) должен присутствовать параметр ArchOb. Класс CArchive весьма важен и имеет внушительный размер.
|