Читаем Microsoft Visual C++ и MFC. Программирование для Windows 95 и Windows NT полностью

Когда пользователь создает новый документ в приложении, построенном на основе однооконного интерфейса, то на самом деле используется старый документ. Новый объект класса, представляющего документ, не создается. Метод OnNewDocument должен удалить содержимое документа и выполнить повторную инициализацию существующего объекта класса документ.

Из этого следует, что нельзя выполнять инициализацию документа в конструкторе класса документа, так как конструктор будет вызван только один раз за время работы приложения. Более правильно использовать для этой цели метод OnNewDocument.

Для приложений, использующих многооконный интерфейс, процедура создания нового документа отличается. Каждый раз, когда пользователь создает новый документ, создается новый объект класса документ. Процесс создания нового документа мы опишем в следующей главе.

//////////////////////////////////////////////////////////////

// Метод DeleteContents

void CSingleDoc::DeleteContents() {

 // TODO:

 // Очищаем документ, удаляя все элементы массива arrayFig.

 // Метод RemoveAll определен в классе CArray

 arrayFig.RemoveAll();


 // Вызываем метод DeleteContents базового класса CDocument

 CDocument::DeleteContents();

}

Сохранение и восстановление документа на диске

Построенное вами приложение можно использовать для рисования и печати документов, но оно не позволяет сохранять и загружать документ из файла на диске. Вы можете выбрать строку Save As (сохранить под именем) из меню File. На экране появится диалоговая панель Save As. В этой панели вы можете ввести имя файла, в котором надо сохранить документ. Однако несмотря на то, что файл создается, документ в него не записывается – файл остается пустым.

Вы можете попытаться его открыть, выбрав из меню File строку Open. Однако единственным результатом будет изменение заголовка окна. Чтобы приложение обрело возможность сохранения документов в файле и последующего чтения, надо изменить метод Serialize класса документа CSingleDoc.

Метод Serialize вызывается всякий раз когда надо сохранить документ в файле на диске или загрузить его из существующего файла. В частности, метод Serialize вызывается, когда пользователь выбирает из меню File строки Save, Save As и Open. Основные принципы работы метода Serialize были рассмотрены нами в разделе “Запись и восстановление объектов”.

MFC AppWizard подготавливает шаблон метода Serialize для класса CSingleDoc, представляющего документ приложения.

//////////////////////////////////////////////////////////////

// Метод Serialize класса CSingleDoc отвечает за сохранение и

// последующее восстановление документов приложения


void CSingleDoc::Serialize(CArchive& ar) {

 if (ar.IsStoring()) {

  // TODO: Здесь выполняется сохранение документа

 } else {

  // TODO: Здесь выполняется загрузка документа

 }

}

Вы должны определить в методе Serialize, как он должен сохранять и восстанавливать документы приложения. Так как документ, с которым работает наше приложение представлен классом CSingleDoc, то все что должен делать метод Serialize – это сохранять все элементы массива arrayFig.

//////////////////////////////////////////////////////////////

// Метод Serialize класса CSingleDoc


void CSingleDoc::Serialize(CArchive& ar) {

 int i; // временная переменная

 int num; // количество фигур в документе


 // Сохранение документа

 if (ar.IsStoring()) {

  // Определяем количество элементов массива arrayFig

  num = arrayFig.GetSize();


  // Записываем полученное число в файл

  ar << num;


  // Записываем в файл координаты и тип фигур

  for (i=0; i

   // Сохраняем координаты центра фигуры

   ar << arrayFig[i].xyFigCenter;

   // Сохраняем тип фигуры

   ar << arrayFig[i].cType;

  }

 }


 // Загрузка документа

 else {

  // Считываем количество элементов, составляющих документ

Перейти на страницу:

Все книги серии Библиотека системного программиста

Похожие книги

Разработка приложений в среде Linux. Второе издание
Разработка приложений в среде Linux. Второе издание

Книга известных профессионалов в области разработки коммерческих приложений в Linux представляет СЃРѕР±РѕР№ отличный справочник для широкого круга программистов в Linux, а также тех разработчиков на языке С, которые перешли в среду Linux из РґСЂСѓРіРёС… операционных систем. РџРѕРґСЂРѕР±но рассматриваются концепции, лежащие в основе процесса создания системных приложений, а также разнообразные доступные инструменты и библиотеки. Среди рассматриваемых в книге вопросов можно выделить анализ особенностей применения лицензий GNU, использование СЃРІРѕР±одно распространяемых компиляторов и библиотек, системное программирование для Linux, а также написание и отладка собственных переносимых библиотек. Р

Майкл К. Джонсон , Эрик В. Троан

Программирование, программы, базы данных