Чтобы приложение имело возможность сохранения документов в файле, нужно изменить метод Serialize класса документа. Метод Serialize вызывается всякий раз, когда надо сохранить документ в файле на диске или загрузить его из существующего файла. В частности, этот метод вызывается, когда пользователь выбирает из меню File строки Save, Save As и Open.
Средство MFC AppWizard подготавливает шаблон метода Serialize для класса, представляющего документ приложения:
void CDoc::Serialize(CArchive& ar) { if (ar.IsStoring()) { // TODO: add storing code here } else { // TODO: add loading code here } }
В методе Serialize необходимо определить, как он должен сохранять и восстанавливать документы приложения.
Метод Serialize имеет единственный параметр ar, представляющий ссылку на объект класса CArchive. Этот объект, называемый архивом, представляет файл документа, расположенный на диске. Кроме того, архив несет в себе информацию о том, что делать с документом - записать его в файл или выгрузить из файла.
Для того, чтобы определить, какую операцию надо выполнить, используется метод IsStoring, определенный в классе CArchive. Если этот метод возвращает ненулевое значение для объекта ar, переданного методу Serialize, значит, надо сохранить документ в файле.
Перед открытием приложением другого файла-документа (или перед созданием нового) при наличии внесенных изменений в текущий документ принято предупреждать об этом пользователя. Класс CDocument и все классы, для которых он является базовым, позволяют установить специальный флаг модификации, означающий, что документ был изменен. В этом случае перед закрытием документа пользователю будет предложено его сохранить. Для установки этого флага предназначен метод SetModifiedFlag.
Если документ изменен, необходимо установить флаг модификации, вызвав метод SetModifiedFlag с параметром bModified, равным TRUE, или без параметра. В случае необходимости можно убрать установленный флаг. Для этого надо вызвать метод SetModifiedFlag с параметром bModified, равным FALSE. Устанавливать флаг модификации нужно в методах, выполняющих модификацию документа.