- •Лабораторная работа № 1 Высокоуровневые методы разработки приложений в среде
- •1.1 Создание и сохранение проекта
- •1.2 Открытие, модификация и настройка параметров проекта
- •1.3 Создание форм и их модулей
- •1.4 Создание программных модулей
- •1.5 Построение интерфейса пользователя
- •1.6 Задания для самостоятельной работы в среде Delphi
- •Лабораторная работа № 2 Высокоуровневые методы разработки приложений в среде
- •2.1 Создание и сохранение проекта
- •2.2 Открытие, модификация и настройка параметров проекта
- •2.3 Создание форм и их модулей
- •2.4 Создание программных модулей
- •2.5 Построение интерфейса пользователя
- •Лабораторная работа № 3
- •Высокоуровневые методы разработки приложений на языке
- •C# в среде Visual Studio .Net
- •3.1 Среда Visual Studio и платформа .Net
- •3.2 Проекты и решения
- •3.3 Задания для самостоятельной работы Visual Studio .Net
- •Лабораторная работа № 4
- •4 Высокоуровневые методы разработки приложений на
- •4.1 Разработка программы на базе каркаса приложений
- •4.2 Создание остова приложения
- •4.3 Создание приложения с диалоговым интерфейсом
- •4.4 Создание приложения с однодокументным интерфейсом
- •4.5 Создание приложения с многодокументным интерфейсом
- •4.6 Задания для самостоятельной работы на пэвм
- •Initial status bar –добавляет строку состояния с индикаторами специальных клавиш;
- •440400, Г. Пенза, ул. Моковская, 74, к. 220, тел.: 56-37-16
4.5 Создание приложения с многодокументным интерфейсом
Приложения с многодокументным интерфейсом MDI(Multiple Document Interface) позволяют пользователю работать одновременно с несколькими документами. Мастер приложений AppWizard создает остовы таких приложений автоматически. Однако эти остовы имеют два существенных недостатка: открываемые одновременно документы должны быть одного и того же типа и между ними почти отсутствует взаимодействие. Таким образом, MDI-приложения, остовы которых строит AppWizard, мало что дают в сравнении с SDI-приложениями и программисту, и пользователю.
Настоящий эффект MDI-приложения дает тогда, когда они поддерживают работу с несколькими типами документов, обеспечивая при этом между ними хорошее взаимодействие. Хорошим примером такого приложения является приложение, объединяющее текстовый редактор и словарь для одновременной работы с двумя типами документов: редактируемым текстом и словарем терминов с их определениями или переводом.
Каркас MDI-приложений таков, что он обеспечивает в процессе работы создание нескольких объектов-документов. За их создание отвечает специальный объектно-документный шаблон класса CMultiDocTemplate, который формируется с помощью метода InitInstance(), инициализирующего объект-приложение проекта. Кроме того, каркас создает два вида объектов, являющихся окнами-рамками: главное окно-рамка и окно-рамка документа, при этом Windows-окно, связанное с окном-рамкой документа является дочерним по отношению к Windows-окну, связанному с главным окном-рамкой.
Документный шаблон MDI-каркаса следующим образом управляет процессом создания новых документов:
BOOL CMdiApp::InitInstance()
{CMultiDocTemplate* pDocTemplate;
pDocTemplate=new CMultiDocTemplate
(IDR_MDITYPE,
RUNTIME_CLASS(CMdiDoc),
RUNTIME_CLASS(CChildFrame),
RUNTIME_CLASS(CMdiView)
);
AddDocTemplate(pDocTemplate);
CMainFrame* pCMainFrame=new CMainFrame;
If (!pCMainFrame->LoadFrame(IDR_MAINFRAME));
return FALSE;
M_pMainWnd= pMainFrame;
return TRUE;
}
Здесь RUN_TIME_CLASS является макросом, позволяющим по имени некоторого класса получить ссылку на специальную структуру типа CRunTimeClass, описывающую этот класс.
Идентификатор IDR_MDITYPE задает целый ряд ресурсов, связанных с документом, например, меню приложения.
Документный шаблон получает при своем создании описания трех классов:
а) класса документа CMdiDoc;
б) класса окна-рамки документа CСhildFrame;
в) класса облика CМdiView.
Все эти описания будет хранить созданный документный шаблон. При выборе пользователем команд New или Open главного меню каркас приложения, используя метод CreateObject и описания классов, имеющихся в документном шаблоне, создает объекты этих классов:
CRunTimeClass* pCRunTimeClass=RUNTIME_CLASS(CMdiDoc);
CObject* pObject= pRunTimeClass->CreateObject();
// Далее идут аналогичные операторы для CСhildFrame CМdiView.
Эти объекты будут принадлежать классам, определенным программистом, а значит, каркас получит доступ к тем виртуальным методом, которые он переопределяет.
Чтобы стать доступным каркасу, шаблон должен быть присоединен к списку документных шаблонов приложения с помощью метода CWinApp::AddDocTemplate. Для создания ещё одного варианта набора из документа, рамки и облика достаточно присоединить к списку документных шаблонов приложения ещё один шаблон с описаниями нужных классов.
Для приобретения необходимых навыков по разработке приложений с диалоговым интерфейсом следует выполнить задания 4.19 – 4.21 .