Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
38
Добавлен:
16.02.2016
Размер:
1.98 Mб
Скачать

6

Документы и отображения

Для реализации SDI и MDI приложений в Visual C++ используется ме-;анизм документ-отображение. Это позволяет отображать один документ шличными способами.

Основные возможности внутреннего представления документа реализу-отся классом CDocument. Как правило, для открытия и сохранения доку­мента используются команды Open и Save меню File.

Основные возможности отображения содержания документа, а также шзбражения любой графической информации реализуются классом CView. Объекты этого класса мы будем называть отображениями.

Одному документу может быть сопоставлено несколько различных объ-:ктов отображения.

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

В свою очередь, объект отображение также привязан к объекту окну-эамке. На рис. 6.1 изображена взаимосвязь объектов документ->отображе--ше- >окно-рамка.

Рис. 6.1. Взаимосвязь объектов документ->отображение->окно-рамка

Объект отображение используется не только для представления доку­ментов на экране. Этот объект представляет документ как для печати, так и для предварительного просмотра печатаемого документа.

С помощью механизма документ/отображения реализуется разделение дан­ных, их экранного представления и обработки действий пользователя.

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

Документы, сопоставленные им отображения, окна-рамки создаются с использованием шаблона документа. Каждый шаблон документа использу­ется для создания и управления всех документов одного типа.

Visual C++ поддерживает реализацию команд New и Open меню File. Создание нового документа и сопоставленного ему отображения и окна-рамки выполняется различными объектами: объектом приложение, шабло­ном документа, созданным документом и созданным окном-рамкой. Сле­дующая таблица иллюстрирует, какими объектами создаются шаблон доку­мента, документ, окно-рамка и отображение.

Создающий объект

Создаваемый объект

Приложение (Application object)

Шаблон документа

Шаблон документа (Document template)

Документ

Шаблон документа (Document template)

Окно-рамка

Окно-рамка (Frame window)

Отображение (View)

Использование документов и отображений

Управление данными

Для реализации управления данными документа первоначально следует выполнить такие действия:

1. Объявить производный класс от CDocument для каждого типа документов;

2. Добавить переменные класса для хранения данных;

3. Переопределить в производном классе документа метод Serialize класса CDocument. Метод Serialize реализует чтение и запись данных документа с диска;

4. Если необходимо, можно дополнительно переопределить другие методы базового класса, такие, как OnNewDocument, OnOpenDocument и DeleteContents.

Переменные класса для хранения данных документа

Данные документа хранятся в переменных класса. Конкретная реализа­ция хранения данных зависит от создаваемого приложения. Библиотека MFC содержит ряд классов, инкапсулирующих работу с различными наборами данных. Это такие классы, как CString, CRect, CPoint, CSize, dime, CObList, CByteArray, CStringlist, CMapWordToPrt и др.

Для выполнения операций над элементами данных в класс документа i можно добавлять требуемые методы.

При создании объекта отображение формируется указатель на документ,] используемый отображением для доступа к объекту документ (его методам и переменным). Этот указатель может быть получен объектом отображения вызовом метода GetDocument класса CView.

Отметим, что если необходимо реализовать прямой доступ к данным или использовать члены класса документа, не имеющие модификатора досЯ тупа public, то следует реализовать класс отображения как дружественный (friend) классу документа.

Классы отображений

Для вывода данных на различные графические устройства используются

клабсы отображений. Базовым классом всех таких классов является CView. Библиотека MFC предоставляет следующий набор производных классов

от класса отображения CView:

CScroUView - для автоматической прокрутки и масштабирования отображения;

CFormView - для отображения форм, содержащих элементы управления. Объект CFormView создается из ресурса диалога-шаблона (dialog-template);

CRecordView и CDaoRecordView - для отображения форм, содержащих эле-jl менты управления, связанные с полями объекта CRecordset или CDaoRecordset, отображающими таблицы баз данных;

CCtrlView - базовый класс для классов CEditView, CTreeView, CListView,

CEditView и CRichEditView. Эти классы позволяют использовать ар- | хитектуру документ/отображение для некоторых элементов управле­ния Windows;

CEditView - для отображения, реализующего свойства окна редактирования. Объект класса CEditView реализует работу простого текстового ре­дактора.

CListView - для отображения, содержащего объект CListCtrl;

CRichEditView - для отображения, содержащего объект CRichEditCtrl. Этот j класс отображения реализует свойства окна редактирования и позво- j ляет управлять форматированием текста;

CTreeView - для отображения, содержащего объект CTreeCtrl.

Реализация графического вывода данных через классы отображений

Объект класса CView представляет собой прямоугольную область экрана, в которую производится вывод данных в графическом режиме. При пере­мещении окна или при временном перекрытии его другим окном необхо­димо восстановить на экране содержимое, расположенное в области объек­та CView. Для того чтобы перерисовать окно (когда область отображения становится недостоверной), Windows посылает приложению, владеющему этим окном, сообщение WM_PAINT. Метод OnPaint класса отображения создает контекст устройства класса CPaintDC и вызывает метод OnDraw производного класса отображения, передавая ему в качестве параметра контекст устройства. Следовательно, для того чтобы при перемещении и перекрытии окон не возникало ошибок визуального отображения содержи­мого окна, программист должен переопределить метод OnDraw класса CView, обрабатывающий соответствующее сообщение. Дополнительно мо­гут быть переопределены такие методы класса CView, как OnlnitialUpdate, OnUpdate, OnPreparePrinting.

Соседние файлы в папке VC++Баженова