архитектура приложений mfc
DESCRIPTION
Описание различных архитектур приложений MFC, их назначение и использованиеTRANSCRIPT
АРХИТЕКТУРА ПРИЛОЖЕНИЙ MFC
Михаил Кройтор
Содержание
Типы приложений MFC Диалоговые приложения Однодокументные приложения
Архитектура Документ / Представление Рисование, Печать и предварительный просмотр Сериализация данных
Многодокументные приложения
Типы приложений MFC
Диалоговые приложения (Dialog Based) – приложения, не предназначенные для работы с документами;
Однодокументные приложения (SDI – Single Document Interface) – приложения, работающие с одним документом;
Многодокументные приложения (MDI – Multiple Document Interface) – приложения, поддерживающие работу с несколькими документами сразу. Каждый документ отображается в рамках главного окна;
Диалоговые приложения
Диалоговые приложения
Архитектура диалогового приложения представляется двумя объектами: Объект класса приложения, унаследованного от
CWinApp; Объект окна, унаследованного от класса
диалогового окна CDialog.
Однодокументные приложения
Однодокументные приложения
Однодокументные приложения (SDI – Single Document Interface) поддерживают работу с файлами.
Однодокументные приложения реализуют архитектуру разделения данных от их предствления (Document/View – документ/представление)
Архитектура Документ / Представление Архитектура Документ/Представление
(Document/View) связывает данные с их отображением на экране. Документ представляется объектом, содержащим данные приложения. Представление этого документа реализуется объектом клиентского окна, с помощью которого пользователь взаимодействует с данными приложения.
Архитектура Документ / Представление
Объект Описание
Документ Объект класса, унаследованного от CDocument. Определяет данные приложения
Представление Объект класса, унаследованного от CView. Предназначен для отображения данных приложения на экране и для организации взаимодействия этих данных с пользователем.
Рамка окна Объект класса, унаследованного от CFrameWnd. Представления отображаются в границах этого окна.
Шаблон документа Объект класса, унаследованного от CDocTemplate. Управляет процессом создания представлений, документов и окон.
Приложение Объект класса, унаследованного от CWinApp.
Архитектура Документ / Представление
Объект документа предназначен для чтения, сохранения данных, а также для управления этими данными.
Один документ может иметь множество различных представлений.
Доступ к представлениям через функции GetFirstViewPosition() и GetNextView()
Обновляются представления функцией UpdateAllViews()
Архитектура Документ / Представление
Объект представления организует работу пользователя с данными
Класс представления может быть унаследован от: CView – базовый класс представлений CScrollView – представление с поддержкой прокрутки CListView – в основе CListCtrl CEditView – представление текстового редактора (plain text) CRichEditView – представление текстового редактора (rich text) CFormView – в основе представления - форма CHtmlView – представление, отображающее html CHtmlEditView –представление, отображающее html, позволяющее
редактировать Доступ к данным документа осуществляется через функцию
GetDocument()
Рисование, Печать и предварительный просмотр
Приложения MFC взаимодействуют с графическими устройствами через GDI интерфейсы (Graphics Device Interface).
Интерфейс GDI работает со структурами данных, называемых контекстами устройства, которые описывают устройства вывода.
CDC – класс, инкапсулирующий контекст устройства и большинство функций GDI.
Рисование, Печать и предварительный просмотр
специальные классы, унаследованные от CDC: CPaintDC – для прорисовки недействительной
части окна CClientDC – описывает контекст устройства
клиентской области окна CWindowDC – описывает контекст устройства,
представляющего всё окно вместе с рамкой CMetafileDC – описывает данные в аппаратно-
независимом формате.
Рисование, Печать и предварительный просмотр
Графический вывод данных приложения осуществляется функцией OnDraw представления. void CView::OnDraw(CDC* pDC);
GDI является аппаратно-независимым интерфейсом, поэтому вывод на печать, предварительный просмотр и пр. производится одинаковым образом.
Сериализация данных
сериализация – механизм, в котором каждый объект сам определяет способ сохранения своего состояния. Механизм сериализации реализуется при помощи
функции Serialize класса CObject. Любой объект в MFC, класс которого унаследован
от класса CObject, поддерживает сериализацию. Базовые типы данных являются сериализуемыми.
Сериализация данных:функция Serialize
void CdrawfuncDoc::Serialize(CArchive& ar){ if (ar.IsStoring()){ // TODO: add storing code here } else { // TODO: add loading code here }}
Сериализация данных:создание сериализуемого класса
Для того, чтобы объект сделать сериализуемым, необходимо выполнить следующие действия: Унаследовать класс от класса CObject. Это обеспечит базовый
механизм сериализации. Добавить в объявление класса макрос
DECLARE_SERIAL(<имя класса>). Макрос добавляет в класс дополнительные поля и методы, которые обеспечивают механизм сериализации.
Перегрузить функцию Serialize. Добавить макрос IMPLEMENT_SERIAL(<имя класса>,<имя
базового класса>,<номер версии>) в реализацию класса. Этот макрос обеспечивает реализацию методов, объявленных макросом DECLARE_SERIAL.
Сериализация данных:сериализация контейнеров
Для сериализации контейнеров необходимо Чтобы элементы контейнера были сериализуемыми элементы контейнера должны иметь конструктор
по умолчанию и оператор копирования. специализировать шаблонную функцию
SerializeElements.template<>void AFXAPI SerializeElements(CArchive& ar, CStudent* pEl, INT_PTR nCount){ int i; for(i = 0; i != nCount; ++i){ pEl[i].Serialize(ar); }}
Многодокументные приложения
Многодокументные приложения
Архитектура многодокументных приложений (MDI) предполагает создание дочерних окон документов в рамках общего окна приложения.
Приложения с вкладками (Tabbed Document Interface - TDI) обычно представляют частный случай MDI.
Многодокументные приложения
КЛАСС ОПИСАНИЕCWinApp Класс приложения
CMDIFrameWnd Класс основного окна приложения
CMDIChildWnd Класс дочерних окон приложения
CMultiDocTemplate Класс шаблона документа. Отвечает за создание дочерних окон, документов и их представлений
CDocument Класс документа
CView Класс представления