<< Предыдущая страница

Содержание

Следующая страница >>

Раздел 5. Использование архитектуры документ-вид в приложениях MFC

Основные принципы архитектуры документ-вид

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

AppWizard позволяет создавать каркас приложения, построенного на архитектуре документ-вид, как с одним документом, так и со многими документами. Приложение с одним документом может содержать в каждый момент времени только один открытый документ, в случае же многодокументного приложения возможно открытие сразу нескольких документов одновременно. Примером приложения имеющего многодокументный интерфейс является Microsoft Word, примером приложения с одним документом является программа Notepad (блокнот).

Приложение MFC на основе документ-вид с одним документом

При создании с помощью AppWizard приложения на основе одного документа, в нем создается специальный класс Документа, наследуемый от CDocument, в котором будут храниться данные, используемые приложением, и имеются методы для их сохранения на диск и восстановления с диска. Процесс сохранения данных документа на диск называется сериализацией, а восстановления документа с диска – десериализацией. Также AppWizard создает специальный класс Вида для отображения данных. Выбор конкретного типа этого класса осуществляется пользователем, но все эти классы наследуются от класса CView, имеющего базовые методы для отображения документа и взаимодействия с пользователем. В каркас приложения входит кроме того, класс Приложения, наследуемый от CWinApp, в котором определяется функция InitInstance, являющаяся точкой входа в приложение, и класс Рамки, ответственный за отображение элементов управления окна приложения.

Отображение данных пользователю, обычно осуществляется в методе OnDraw класса Вид, который является аналогом обработчика сообщения WM_PAINT для стандартного приложения Windows API. Для взаимодействия с классом Документа, в классе Вид имеется специальный метод GetDocument, который возвращает указатель на объект Документа. Используя этот указатель, можно выводить данные документа в методе OnDraw.

ClassWizard позволяет создавать обработчики для различных типов сообщений, как правило, обработчики этих сообщений помещаются в класс Вида. Используя указатель на объект Документа, эти обработчики могут менять данные приложения.

Для сериализации и десериализации данных на диске в классе Документа, имеется метод Serialize, который использует переопределяемую операцию “<<” для записи на диск и операцию “>>” для считывания с диска. Кроме того в классе Документа, определен метод OnNewDocument, который вызывается при создании нового Документа. При создании каркаса приложения AppWizard создает меню, в котором уже есть необходимые пункты для сохранения и восстановления данных с диска. Обработка событий от этих пунктов меню осуществляется каркасом приложения автоматически, создание для них обработчиков не требуется.

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

Цель: получение навыков применения архитектуры документ-вид при проектировании приложений Windows.

Таблица 6

Варианты задания 5

№ варианта Задание
1 Прямоугольники и окружности. Цвета контура и заливки задаются в целом для всех объектов, размер каждого графического элемента можно задавать с помощью ползунка с отображением размера в поле редактирования.
2 Треугольники и эллипсы. Цвет контура и заливки задается для каждого объекта индивидуально. Масштаб вывода всех объектов изменяется с помощью счетчика и отображается с помощью индикатора прогресса.
3 Буквы, заданным шрифтом, размером и цветом. Цвет буквы и сама буква может различаться для каждого объекта, шрифт всех букв выбирается и его название отображается.
4 Растровые изображения и треугольники. Растровые изображения и заливка треугольников задаются индивидуально, размер для всех треугольников выбирается в раскрывающемся списке.
5 Буквы и прямоугольники. Цвет и шрифт выбираются для всех объектов, буква и размер прямоугольника выбираются индивидуально из раскрывающегося и простого списка .
6 Сектора эллипсов. Угол выбирается с помощью счетчика и индивидуален для каждого сектора, цвета контура и заливки устанавливаются для всех объектов.
7 Линии, начало и конец которых определяется пользователем. Толщина линий задается индивидуально с помощью ползунка, цвет линий задается один для всех.
8 Растровые изображения и буквы. Растр задается один для всех. Шрифт и сама буква задается индивидуально для каждого объекта.
9 Прямоугольники, верхний левый и нижний правый угол которых определяется пользователем. Цвет контура задается индивидуально, а цвет заливки один для всех. Толщина контура выбирается из раскрывающегося списка.
10 Ломанные, имеющие от 3 до 5 точек. Вершины ломанных задаются пользователем щелчками мыши. Число точек задается индивидуально для каждого объекта, цвет контура задается тоже индивидуально, толщина контура выбирается с помощью переключателя и устанавливается для всех ломанных.
11 Буквы и треугольники. Масштаб треугольников задается для всех с помощью переключателя, буква вводится индивидуально в поле редактирования, шрифт также индивидуален.
12 Треугольники, окружности, прямоугольники. Цвет выбирается один для всех фигур определенного вида, размер задается индивидуально в поле редактирования для каждого объекта.
13 Прямоугольники с заливкой из растров. Растры выбираются индивидуально для каждого прямоугольника, цвет контура один для всех, толщина контура выбирается с помощью переключателя.
14 Окружности с заливкой из растров. Растр выбирается один для всех объектов, радиус окружностей выбирается индивидуально с помощью счетчика и отображается в поле редактирования.
15 Буквы. Цвет букв выбирается индивидуально, шрифт выбирается для всех букв, его название отображается, размер букв выбирается из раскрывающегося списка и индивидуален.
16 Квадраты и эллипсы. Цвет фигур один для каждого вида фигур. Отношение полуосей эллипсов и размер осей выбирается индивидуально.
17 Ломанные, имеющие от 4 до 6 точек. Вершины ломанных задаются щелчками мыши. Число точек задается индивидуально для каждой ломанной. Цвет и толщина контура выбирается для всех.
18 Растровые изображения и окружности. Растр выбирается индивидуально. Цвет задается для всех окружностей. Размер окружностей выбирается из раскрывающегося списка и индивидуален.
19 Треугольники и сектора эллипсов. Цвет объектов задается индивидуально, угол также задается индивидуально для каждого сектора. Масштаб фигур меняется с помощью счетчика и отображается в поле редактирования.
20 Буквы и растровые изображения. Растр выбирается для всех изображений, шрифт букв и сами буквы задаются для каждого объекта.
21 Прямоугольники. Ширина и высота прямоугольников задаются индивидуально, цвет задается один для всех. Толщина контура меняется с помощью ползунка.
22 Эллипсы и буквы. Буквы и их шрифт задается индивидуально, цвет заливки эллипсов один для всех.
23 Линии, начало и конец которых определяется пользователем. Толщина линий задается для всех с помощью ползунка, цвет линий задается индивидуально.
24 Прямоугольники с заливкой из растров. Растр выбирается один для всех объектов, отношение сторон выбирается индивидуально с помощью счетчика и отображается в поле редактирования.
25 Буквы. Шрифт и сама буква задается индивидуально для каждого объекта. Цвет букв один для всех.

Указания. Для сохранения общих настроек в реестре и считывания их из реестра можно использовать методы класса CWinApp: GetProfileString, WriteProfileString. Для считывания растровых изображений из файла удобно пользоваться API функцией LoadImage. Изображения можно выводить на экран функцией API BitBlt или методом класса CDC BitBlt, или методом этого же класса DrawState.