Download - архитектура приложений mfc
![Page 1: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/1.jpg)
АРХИТЕКТУРА ПРИЛОЖЕНИЙ MFC
Михаил Кройтор
![Page 2: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/2.jpg)
Содержание
Типы приложений MFC Диалоговые приложения Однодокументные приложения
Архитектура Документ / Представление Рисование, Печать и предварительный просмотр Сериализация данных
Многодокументные приложения
![Page 3: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/3.jpg)
Типы приложений MFC
Диалоговые приложения (Dialog Based) – приложения, не предназначенные для работы с документами;
Однодокументные приложения (SDI – Single Document Interface) – приложения, работающие с одним документом;
Многодокументные приложения (MDI – Multiple Document Interface) – приложения, поддерживающие работу с несколькими документами сразу. Каждый документ отображается в рамках главного окна;
![Page 4: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/4.jpg)
Диалоговые приложения
![Page 5: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/5.jpg)
Диалоговые приложения
Архитектура диалогового приложения представляется двумя объектами: Объект класса приложения, унаследованного от
CWinApp; Объект окна, унаследованного от класса
диалогового окна CDialog.
![Page 6: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/6.jpg)
Однодокументные приложения
![Page 7: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/7.jpg)
Однодокументные приложения
Однодокументные приложения (SDI – Single Document Interface) поддерживают работу с файлами.
Однодокументные приложения реализуют архитектуру разделения данных от их предствления (Document/View – документ/представление)
![Page 8: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/8.jpg)
Архитектура Документ / Представление Архитектура Документ/Представление
(Document/View) связывает данные с их отображением на экране. Документ представляется объектом, содержащим данные приложения. Представление этого документа реализуется объектом клиентского окна, с помощью которого пользователь взаимодействует с данными приложения.
![Page 9: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/9.jpg)
Архитектура Документ / Представление
Объект Описание
Документ Объект класса, унаследованного от CDocument. Определяет данные приложения
Представление Объект класса, унаследованного от CView. Предназначен для отображения данных приложения на экране и для организации взаимодействия этих данных с пользователем.
Рамка окна Объект класса, унаследованного от CFrameWnd. Представления отображаются в границах этого окна.
Шаблон документа Объект класса, унаследованного от CDocTemplate. Управляет процессом создания представлений, документов и окон.
Приложение Объект класса, унаследованного от CWinApp.
![Page 10: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/10.jpg)
Архитектура Документ / Представление
Объект документа предназначен для чтения, сохранения данных, а также для управления этими данными.
Один документ может иметь множество различных представлений.
Доступ к представлениям через функции GetFirstViewPosition() и GetNextView()
Обновляются представления функцией UpdateAllViews()
![Page 11: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/11.jpg)
Архитектура Документ / Представление
Объект представления организует работу пользователя с данными
Класс представления может быть унаследован от: CView – базовый класс представлений CScrollView – представление с поддержкой прокрутки CListView – в основе CListCtrl CEditView – представление текстового редактора (plain text) CRichEditView – представление текстового редактора (rich text) CFormView – в основе представления - форма CHtmlView – представление, отображающее html CHtmlEditView –представление, отображающее html, позволяющее
редактировать Доступ к данным документа осуществляется через функцию
GetDocument()
![Page 12: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/12.jpg)
Рисование, Печать и предварительный просмотр
Приложения MFC взаимодействуют с графическими устройствами через GDI интерфейсы (Graphics Device Interface).
Интерфейс GDI работает со структурами данных, называемых контекстами устройства, которые описывают устройства вывода.
CDC – класс, инкапсулирующий контекст устройства и большинство функций GDI.
![Page 13: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/13.jpg)
Рисование, Печать и предварительный просмотр
специальные классы, унаследованные от CDC: CPaintDC – для прорисовки недействительной
части окна CClientDC – описывает контекст устройства
клиентской области окна CWindowDC – описывает контекст устройства,
представляющего всё окно вместе с рамкой CMetafileDC – описывает данные в аппаратно-
независимом формате.
![Page 14: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/14.jpg)
Рисование, Печать и предварительный просмотр
Графический вывод данных приложения осуществляется функцией OnDraw представления. void CView::OnDraw(CDC* pDC);
GDI является аппаратно-независимым интерфейсом, поэтому вывод на печать, предварительный просмотр и пр. производится одинаковым образом.
![Page 15: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/15.jpg)
Сериализация данных
сериализация – механизм, в котором каждый объект сам определяет способ сохранения своего состояния. Механизм сериализации реализуется при помощи
функции Serialize класса CObject. Любой объект в MFC, класс которого унаследован
от класса CObject, поддерживает сериализацию. Базовые типы данных являются сериализуемыми.
![Page 16: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/16.jpg)
Сериализация данных:функция Serialize
void CdrawfuncDoc::Serialize(CArchive& ar){ if (ar.IsStoring()){ // TODO: add storing code here } else { // TODO: add loading code here }}
![Page 17: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/17.jpg)
Сериализация данных:создание сериализуемого класса
Для того, чтобы объект сделать сериализуемым, необходимо выполнить следующие действия: Унаследовать класс от класса CObject. Это обеспечит базовый
механизм сериализации. Добавить в объявление класса макрос
DECLARE_SERIAL(<имя класса>). Макрос добавляет в класс дополнительные поля и методы, которые обеспечивают механизм сериализации.
Перегрузить функцию Serialize. Добавить макрос IMPLEMENT_SERIAL(<имя класса>,<имя
базового класса>,<номер версии>) в реализацию класса. Этот макрос обеспечивает реализацию методов, объявленных макросом DECLARE_SERIAL.
![Page 18: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/18.jpg)
Сериализация данных:сериализация контейнеров
Для сериализации контейнеров необходимо Чтобы элементы контейнера были сериализуемыми элементы контейнера должны иметь конструктор
по умолчанию и оператор копирования. специализировать шаблонную функцию
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](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/19.jpg)
Многодокументные приложения
![Page 20: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/20.jpg)
Многодокументные приложения
Архитектура многодокументных приложений (MDI) предполагает создание дочерних окон документов в рамках общего окна приложения.
Приложения с вкладками (Tabbed Document Interface - TDI) обычно представляют частный случай MDI.
![Page 21: архитектура приложений mfc](https://reader031.vdocuments.net/reader031/viewer/2022012321/54620082af7959d61d8b6897/html5/thumbnails/21.jpg)
Многодокументные приложения
КЛАСС ОПИСАНИЕCWinApp Класс приложения
CMDIFrameWnd Класс основного окна приложения
CMDIChildWnd Класс дочерних окон приложения
CMultiDocTemplate Класс шаблона документа. Отвечает за создание дочерних окон, документов и их представлений
CDocument Класс документа
CView Класс представления