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