архитектура приложений mfc

21
АРХИТЕКТУРА ПРИЛОЖЕНИЙ MFC Михаил Кройтор

Upload: mcroitor

Post on 11-Nov-2014

405 views

Category:

Education


11 download

DESCRIPTION

Описание различных архитектур приложений MFC, их назначение и использование

TRANSCRIPT

Page 1: архитектура приложений mfc

АРХИТЕКТУРА ПРИЛОЖЕНИЙ MFC

Михаил Кройтор

Page 2: архитектура приложений mfc

Содержание

Типы приложений MFC Диалоговые приложения Однодокументные приложения

Архитектура Документ / Представление Рисование, Печать и предварительный просмотр Сериализация данных

Многодокументные приложения

Page 3: архитектура приложений mfc

Типы приложений MFC

Диалоговые приложения (Dialog Based) – приложения, не предназначенные для работы с документами;

Однодокументные приложения (SDI – Single Document Interface) – приложения, работающие с одним документом;

Многодокументные приложения (MDI – Multiple Document Interface) – приложения, поддерживающие работу с несколькими документами сразу. Каждый документ отображается в рамках главного окна;

Page 4: архитектура приложений mfc

Диалоговые приложения

Page 5: архитектура приложений mfc

Диалоговые приложения

Архитектура диалогового приложения представляется двумя объектами: Объект класса приложения, унаследованного от

CWinApp; Объект окна, унаследованного от класса

диалогового окна CDialog.

Page 6: архитектура приложений mfc

Однодокументные приложения

Page 7: архитектура приложений mfc

Однодокументные приложения

Однодокументные приложения (SDI – Single Document Interface) поддерживают работу с файлами.

Однодокументные приложения реализуют архитектуру разделения данных от их предствления (Document/View – документ/представление)

Page 8: архитектура приложений mfc

Архитектура Документ / Представление Архитектура Документ/Представление

(Document/View) связывает данные с их отображением на экране. Документ представляется объектом, содержащим данные приложения. Представление этого документа реализуется объектом клиентского окна, с помощью которого пользователь взаимодействует с данными приложения.

Page 9: архитектура приложений mfc

Архитектура Документ / Представление

Объект Описание

Документ Объект класса, унаследованного от CDocument. Определяет данные приложения

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

Рамка окна Объект класса, унаследованного от CFrameWnd. Представления отображаются в границах этого окна.

Шаблон документа Объект класса, унаследованного от CDocTemplate. Управляет процессом создания представлений, документов и окон.

Приложение Объект класса, унаследованного от CWinApp.

Page 10: архитектура приложений mfc

Архитектура Документ / Представление

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

Один документ может иметь множество различных представлений.

Доступ к представлениям через функции GetFirstViewPosition() и GetNextView()

Обновляются представления функцией UpdateAllViews()

Page 11: архитектура приложений mfc

Архитектура Документ / Представление

Объект представления организует работу пользователя с данными

Класс представления может быть унаследован от: CView – базовый класс представлений CScrollView – представление с поддержкой прокрутки CListView – в основе CListCtrl CEditView – представление текстового редактора (plain text) CRichEditView – представление текстового редактора (rich text) CFormView – в основе представления - форма CHtmlView – представление, отображающее html CHtmlEditView –представление, отображающее html, позволяющее

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

GetDocument()

Page 12: архитектура приложений mfc

Рисование, Печать и предварительный просмотр

Приложения MFC взаимодействуют с графическими устройствами через GDI интерфейсы (Graphics Device Interface).

Интерфейс GDI работает со структурами данных, называемых контекстами устройства, которые описывают устройства вывода.

CDC – класс, инкапсулирующий контекст устройства и большинство функций GDI.

Page 13: архитектура приложений mfc

Рисование, Печать и предварительный просмотр

специальные классы, унаследованные от CDC: CPaintDC – для прорисовки недействительной

части окна CClientDC – описывает контекст устройства

клиентской области окна CWindowDC – описывает контекст устройства,

представляющего всё окно вместе с рамкой CMetafileDC – описывает данные в аппаратно-

независимом формате.

Page 14: архитектура приложений mfc

Рисование, Печать и предварительный просмотр

Графический вывод данных приложения осуществляется функцией OnDraw представления. void CView::OnDraw(CDC* pDC);

GDI является аппаратно-независимым интерфейсом, поэтому вывод на печать, предварительный просмотр и пр. производится одинаковым образом.

Page 15: архитектура приложений mfc

Сериализация данных

сериализация – механизм, в котором каждый объект сам определяет способ сохранения своего состояния. Механизм сериализации реализуется при помощи

функции Serialize класса CObject. Любой объект в MFC, класс которого унаследован

от класса CObject, поддерживает сериализацию. Базовые типы данных являются сериализуемыми.

Page 16: архитектура приложений mfc

Сериализация данных:функция Serialize

void CdrawfuncDoc::Serialize(CArchive& ar){    if (ar.IsStoring()){           // TODO: add storing code here    }    else    {           // TODO: add loading code here     }}

Page 17: архитектура приложений mfc

Сериализация данных:создание сериализуемого класса

Для того, чтобы объект сделать сериализуемым, необходимо выполнить следующие действия: Унаследовать класс от класса CObject. Это обеспечит базовый

механизм сериализации. Добавить в объявление класса макрос

DECLARE_SERIAL(<имя класса>). Макрос добавляет в класс дополнительные поля и методы, которые обеспечивают механизм сериализации.

Перегрузить функцию Serialize. Добавить макрос IMPLEMENT_SERIAL(<имя класса>,<имя

базового класса>,<номер версии>) в реализацию класса. Этот макрос обеспечивает реализацию методов, объявленных макросом DECLARE_SERIAL.

Page 18: архитектура приложений mfc

Сериализация данных:сериализация контейнеров

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

по умолчанию и оператор копирования. специализировать шаблонную функцию

SerializeElements.template<>void AFXAPI SerializeElements(CArchive& ar, CStudent* pEl, INT_PTR nCount){     int i;     for(i = 0; i != nCount; ++i){            pEl[i].Serialize(ar);     }}

Page 19: архитектура приложений mfc

Многодокументные приложения

Page 20: архитектура приложений mfc

Многодокументные приложения

Архитектура многодокументных приложений (MDI) предполагает создание дочерних окон документов в рамках общего окна приложения.

Приложения с вкладками (Tabbed Document Interface - TDI) обычно представляют частный случай MDI.

Page 21: архитектура приложений mfc

Многодокументные приложения

КЛАСС ОПИСАНИЕCWinApp Класс приложения

CMDIFrameWnd Класс основного окна приложения

CMDIChildWnd Класс дочерних окон приложения

CMultiDocTemplate Класс шаблона документа. Отвечает за создание дочерних окон, документов и их представлений

CDocument Класс документа

CView Класс представления