Визуальное программирование и MFC

       

Создание документов и обликов


Так как документы и их облики являются одними из наиболее важных составляющих архитектуры Document-View, их создание выполняется каркасом приложения. Процесс создания довольно сложен, остановимся на наиболее существенных моментах.

Первый связан со специальными объектами - документными шаблонами (document template). Принадлежа классу CDocTemplate (класс "Документный шаблон") или производным от него классам, они задают описание наиболее существенной части архитектуры, включая описание наиболее существенной части архитектуры Document-View, включая описание класса документа, класса облика документа и класса окна-рамки документа. Документные шаблоны бывают двух видов: для однодокументного интерфейса (SDI) и для многодокументного интерфейса (MDI).

Создание документа и связанных с ним объектов выполняется при открытии пользователем документа - существующего или нового. Это происходит в начале работы приложения, а также когда пользователь выбирает команды Open и New в меню File.

Создание начинается с выбора шаблона документа. В соответствии с описанным в шаблоне классом документа создается сам документ. Если шаблон задает MDI-интерфейс, то каждый раз создается новый объект-документ. Если же шаблон задает SDI-интерфейс, новый объект создается только один раз, а при выборе пользователем команд Open и New производится только "обнуление" имеющегося объекта документа.

Для инициализации созданного документа каркас приложения вызывает метод OnNewDocument при открытии нового документа, а при открытии уже имеющегося - OnOpenDocument. Оба метода принадлежат базовому классу CDocument. Они являются виртуальными, и поэтому, переопределив их, программист может задать необходимые действия по инициализации документа. Однако, эти методы и сами по себе выполняют ряд действий, связанных с инициализацией, - в частности, проверяют, что объект-документ пуст. Переопределенный метод заменяет метод базового класса, поэтому нужно предусмотреть вызов в нем метода базового класса. Остовы методов OnNewDocument и OnOpenDocument, созданные AppWizard, содержат такой вызов.


Для инициализации документа используется и конструктор документа ( это тоже виртуальный метод. Однако, как говорилось выше, если шаблон задает SDI-интерфейс, то при повторном создании или открытии документа объект лишь "обнуляется", и конструктор, следовательно, не вызывается. Поэтому конструктор документа можно использовать для инициализации лишь в случае приложений с MDI-интерфейсом или для инициализации, которая будет важна для всех экземпляров.



После создания документа создается объект главное окно-рамка, который управляет главным Windows-окном приложения. Внутри этого окна располагаются окна-рамки документов. Объект окно-рамка документа создается главным окном-рамкой и служит для управления Windows-окном, внутри которого облик отображает содержимое документа. Окно-рамка документа как раз и создает объект-облик.



Если открывается уже существующий документ, каркас приложения вызывает метод Serialize, который производит загрузку (а при закрытии документа - сохранение) документа из "среды постоянного хранения", которой чаще всего является диск.



Заключительный этап создания документа и связанных с ним объектов - инициализация облика и отображение содержимого документа посредством этого облика.




Содержание раздела