764 ___ _________________Часть V. Инструментарий программиста

Конструирование обрамляющего окна MDI здесь очень похоже на рассмотренное ранее. Чтобы улучшить наше приложение панелями инструментов и состояния, в качестве класса обрамления в данном случае используется TDecoratedFrame. Конструктору TDecoratedMDIFrame В качестве клиента MDI передается новый объект класса ResMDiciient.

После того как сконструировано обрамление, initMainwindow () инициализирует меню, значок главного приложения и таблицу быстрых клавиш для обрамляющего окна. Далее создаются панель инструментов и панель состояния, а затем обрамляющее окно назначается главным окном приложения. Если у вас будет желание, разберитесь на досуге поподробнее с методами создания панелей инструментов и состояния, поскольку они стандартные для большинства приложений на базе OWL.

Последние несколько строк функции initMainwindow () также играют важную роль, в них происходит установка значений флагов, фильтров и расширения по умолчанию для структуры окна диалога открытия файлов. Эта структура используется при каждом открытии и сохранении файлов дочерних окон MDI.

MDI и технология Drag and Drop

Принцип drag and drop (перетащи и опусти) реализован в приложении ResourceText для упрощения редактирования и сравнения файлов ресурсов, т. е. для усовершенствования именно тех функций, которые не слишком удачно реализованы в Resource Workshop.

Drag and drop, не являясь, строго говоря, средством MDI, хорошо вписывается в механизм управления файлами приложений MDI. Drag and drop предоставляет возможность выбора и загрузки группы файлов из каталога в приложение. Это качество очень хорошо сочетается с возможностями MDI быстро открывать и упорядочивать несколько различных окон.

Класс ResTextApp предоставляет доступ к средствам drag and drop следующим образом:

GetMainWindow()->DragAcceptFiles(true) ;

Эта строка находится в конце текста функции initinstanceo.Также за поддержку drag and drop отвечают еще две функции-члена ResTextApp —

EvDropFiles() И AddFiles ().

Функция EvDropFiles () обрабатывает сообщения WM_DROPFILES. Как только ResTextApp:: EvDropFiles получает сообщение WM_DROPFILES, она вызывает функцию-член того же класса AddFiles () для открытия "опущенных" (dropped) файлов. Чтобы более детально разобраться, как работают эти функции, загляните в листинг 26.6 в конце этой главы.

Оставшиеся функции в ResTextApp служат для обеспечения работы оперативной справочной системы. Справочная система введена в ResourceText