Многооконный интерфейс MDI
1.1.
1.2.
1.3.
1.4.
1.5.
1.6.
1.7.
1.8.
1.9.
Как пользователь операционной системы Windows вы, наверное, хорошо знакомы с многооконным интерфейсом MDI (Multiple Document Interface), позволяющим в одном приложении работать одновременно с несколькими документами или с разными представлениями одного и того же документа. Этот интерфейс описан в руководстве по разработке интерфейса пользователя System Application Architecture Common User Access Advanced Interface Design Guide (SAA/CUA), созданном IBM. Интерфейс MDI использован в Windows, начиная с версии 3.0, в Windows NT, а также, разумеется, в графической оболочке Presentation Manager операционной системы OS/2.
В качестве примера приложения, использующего интерфейс MDI (MDI-приложения), можно привести текстовый процессор Microsoft Word for Windows версии 2.0. Рис. 1.1 иллюстрирует работу одновременно с двумя документами, один из которых находится в файле wadvance.doc, расположенном в текущем каталоге, а второй - в файле winmm-1.doc, расположенном в каталоге winmm.
Рис. 1.1. Работа одновременно с двумя документами
Посмотрите на рис. 1.2. Из этого рисунка видно, что текстовый процессор Microsoft Word for Windows способен также предоставить пользователю два различных представления одного и того же документа. В окне WINMM1.DOC:1 отображается обычное представление документа, а в окне WINMM1.DOC:2 - представление в режиме Outline (режим просмотра оглавления документа).
Рис. 1.2. Работа одновременно с двумя представлениями одного и того же документа
Любое MDI-приложение содержит в главном меню строку "Windows", при выборе которой на экране появляется временное (pop up) меню "Windows", предназначенное для управления окнами, отображающими различные документы или различные представления одного и того же документа (пока мы будем называть окно документов окном Document Window, позже уточним терминологию). На рис. 1.3. показано меню "Windows" приложения Program Manager.
Рис. 1.3.
Меню "Window" приложения Program Manager
Как правило, в меню "Windows" есть строки "Cascade" и "Tile", с помощью которых пользователь может расположить окна Document Window с перекрытием (друг за другом) или рядом друг с другом. Могут быть и другие строки, управляющие расположением окон Document Window. Например, если приложение допускает сворачивание окон Document Window в пиктограммы, в меню "Windows" присутствует строка "Arrange Icons", с помощью которой пользователь может упорядочить расположение пиктограмм свернутых окон.
Ниже разделительной черты в меню "Windows" находятся строки, соответствующие окнам Document Window. Если выбрать одну из этих строк, указанное окно будет активизировано и показано на первом плане.
Состав меню "Windows" может быть различным в различных MDI-приложениях, в чем вы можете убедиться сами. Однако в любом случае это меню позволяет вам автоматически упорядочить расположение окон Document Window и выбрать нужное окно из списка для активизации.
Поведение окон Document Window напоминает поведение дочерних окон. В частности, двигая их при помощи заголовка, вы не сможете переместить такие окна за пределы главного окна приложения. В то же время окна Document Window напоминают перекрывающиеся окна, так как их можно делать активными, при этом заголовок активного окна Document Window выделяется цветом.
Каждое окно Document Window имеет, как правило, системное меню (рис. 1.4) и кнопки изменения размера.
Рис. 1.4. Системное меню окна Document Window текстового процессора Microsoft Word for Windows версии 2.0
С помощью системного меню пользователь может изменять размеры или перемещать окно Document Window (строки "Restore", "Move", "Size", "Maximize", "Minimize"), закрывать окно (строка "Close"), передавать фокус ввода от одного окна Document Window другому (строка "Next Window") и выполнять другие действия, в зависимости от назначения приложения.
Для ускоренного доступа к функциям системного меню окна Document Window используются акселераторы. Вы можете активизировать системное меню окна Document Window мышью или при помощи комбинации клавиш <Alt"">.
Если окно Document Window сворачивается в пиктограмму (минимизируется), пиктограмма располагается в нижней части главного окна приложения (рис. 1.5).
Рис. 1.5. Окна Document Window могут быть свернуты в пиктограмму
Если же увеличить размеры окна Document Window до максимальных (при помощи кнопки максимизации или системного меню окна Document Window), внешний вид главного меню приложения изменится (рис. 1.6).
Рис. 1.6. Изменение главного меню приложения при максимальном увеличении размеров окна Document Window
Теперь в левой части главного меню находится пиктограмма системного меню окна Document Window, а в правой - пиктограмма восстановления размера окна Document Window.
Активное окно Document Window выделяется изменением цвета заголовка. Здесь используется тот же способ выделения, что и для главного окна активного приложения. Однако если активно MDI-приложение, выделяются сразу два окна - главное окно MDI-приложения и активное окно Document Window (если оно есть). Такая ситуация показана, например, на рис. 1.1.
Способ создания новых окон Document Window и удаления имеющихся полностью определяется приложением. Обычно новое окно Document Window создается при создании нового документа (строка "New" меню "File") или при загрузке уже существующего документа для редактирования или просмотра (строка "Open" меню "File").
Для того чтобы удалить окно Document Window, можно закрыть документ (строка "Close" меню "File") или закрыть само окно Document Window при помощи системного меню (если этот способ предусмотрен приложением).
Как видите, поведение MDI-приложения выглядит достаточно сложно. Вероятно, вы сможете создать такое приложение с использованием обычных окон, но для этого придется затратить немало усилий.
К счастью, операционная система Windows начиная с версии 3.0 имеет встроенную поддержку MDI-приложений, поэтому большинство из описанных выше свойств окон Document Window реализуется Windows, а не приложением.
Даже с учетом поддержки операционной системы, "полновесные" MDI-приложения выглядят достаточно громоздко. Примером может послужить приложение MULTIPAD, исходные тексты которого поставляются вместе с Microsoft SDK for Windows 3.1 и в составе примеров приложений системы разработки Microsoft Visual C++. Приложение MULTIPAD слишком сложно, для того чтобы начинать с него изучение интерфейса MDI, однако оно является хорошим примером того, как нужно делать подобные приложения. Мы рекомендуем вам после прочтения этой главы разобраться в том, как оно работает.
Не огорчайтесь, если вам покажется, что исходные тексты этого, в общем-то, простого приложения, очень сложны. На данном этапе для вас важно понять принципы, положенные в основу интерфейса MDI. В ближайших томах "Библиотеки системного программиста" мы научим вас создавать такие приложения с использованием библиотек классов Borland Object Windows и Microsoft Foundation Classes. Объем исходных текстов таких приложений, снабженных к тому же окнами Toolbar и Statusbar, намного меньше объема приложений, составленных на "чистом" Си. К тому же современные средства разработки позволяют создавать заготовку приложений автоматически, генерируя все необходимые исходные тексты.
Тем не менее, мы не считаем, что рассказ об интерфейсе MDI следует отложить "до лучших времен" (т. е. до тех времен, когда вы будете использовать в своих разработках готовые библиотеки классов). Несмотря на то, что библиотеки классов скрывают многие детали внутренних процессов операционной системы Windows, знание этих процессов позволит вам создавать приложения более эффективно и с меньшими затратами сил на поиск ошибок, которые возникают из-за непонимания происходящего.