Стоит Windows 8 Pro, Visual Studio 2010 Express Edition . |
Однодокументный интерфейс MFC
Цель работы
- Ознакомиться с архитектурой "Документ/Вид", используемой для создания однодокументных и многодокументных приложений
- Научиться создавать каркасы однодокументных приложений
- Научиться отделять данные от их представления
- Научиться инкапсулировать данные в собственные классы C++
- Научиться организовывать взаимодействие данных и меню
- Посадить все опции меню одной и той же категории на один комбинированный обработчик с распознаванием нажатой опции
- Создать собственную панель инструментов.
- Научиться присоединять панель инструментов к рамке приложения
- Отображать и скрывать панель инструментов с помощью элемента меню
- Помещать поле со списком на панель инструментов
- Отображать описание элементов панели инструментов в строке состояния
- Добавлять собственные элементы строки состояния
Применение концепции Документ/Вид
В основе приложений MFC лежит концепция document object/view window (Документ/Вид). Обычно документ представляет собой отдельный файл, который приложение способно открыть. В нем хранятся данные, управляемые приложением. Отображение данных и интерфейс работы с ними обеспечивает представление. Представление способно отображать данные документа частично и в разной форме, выполняя заданный срез документа.
Отношение между документом и представлением строится по принципу "один ко многим". То есть один документ (одно содержание) может иметь несколько представлений (несколько форм), но каждое из этих представлений отображает одни и те же данные.
Программно такая концепция реализуется механизмом SDI (Single Document Interface) - однодокументный интерфейс. Управление документом осуществляется объектом на основе производного класса от базового класса CDocument, а управление интерфейсами - на основе базового класса CView.
Основой для реализации представления является фреймовое окно, определяющее границы приложения и называемое окном-рамкой. Оно порождается классом CFrameWnd. Фреймовое окно является главным окном приложения и играет роль родительского по отношению к содержащимся в нем окнам. Неотъемлемой частью фреймового окна является его заголовок и меню. Клиентскую область фреймового окна занимают всевозможные дочерние окна, в том числе окно панели инструментов, окно строки состояния, окно представления и др.
В приложениях SDI, созданных мастером MFC Application Wizard, исходный код реализации фреймового окна (реализация класса CMainFrame ) размещается в файлах проекта MainFrm.h и MainFrm.cpp. Класс CMainFrame наследует практически все свои функциональные возможности от базового класса CFrameWnd.
В свою очередь, фреймовым окном управляет каркас приложения, порожденный классом CWinApp. Каркас приложения не имеет визуального представления, его задача - обеспечить взаимодействие окна-рамки и дочерних фреймовых окон. Это взаимодействие осуществляется с помощью сообщений. Модель отношений между базовыми классами приложения SDI приведена на рисунке
Класс CDocument обеспечивает стандартное поведение объектов документа MFC -приложения. Независимо от того, создается однодокументное приложение или многодокументное, мастер AppWizard создает только один класс документа, производный от базового класса CDocument.
Классы массивов MFC
В библиотеке MFC существует несколько классов массивов для хранения различных типов данных. У всех этих классов одинаковые функциональные возможности и работают они по одному и тому же принципу. Основное различие - это тип хранимых в них данных.
Создание заготовки SDI-приложения
Создадим графическое приложение на основе однодокументного интерфейса, в котором можно будет рисовать, и сохранять нарисованное в файле с последующим восстановлением.
- Войдите в свой каталог выполнения лабораторных работ
- Создайте новый проект MFC Application и назовите его DrawSDI
-
Настройте мастер приложений строго в соответствии с таблицей
После настройки вкладки мастера должны иметь такой вид