Операционная система Microsoft Windows 3.1 для программиста© Александр Фролов, Григорий ФроловТом 12, М.: Диалог-МИФИ, 1993, 255 стр. 3. Диалоговые панели
В предыдущей главе мы научили вас создавать в главном окне приложения различные органы управления, такие как кнопки, списки, полосы просмотра и т. п. Однако обычно для объединения органов управления используются временные (pop-up) окна, созданные на базе предопределенного внутри Windows класса окон - класса диалоговых панелей (dialоg window class). На поверхности такого окна располагаются дочерние окна - органы управления. Функция окна для класса диалоговых панелей, определенная в Windows, выполняет практически всю работу, необходимую для организации взаимодействия органов управления с приложением. Вспомним, с какими трудностями мы сталкивались, когда создавали органы управления в главном окне приложения. Для создания каждого органа управления мы вызывали функцию CreateWindow, которой требовалось указывать расположение и размеры органов управления. Поэтому при необходимости внесения изменений во внешний вид приложения приходилось изменять исходные тексты. В функцию родительского окна приходили все сообщения и извещения от всех органов управления. Большие проблемы возникали при необходимости передачи фокуса ввода от одного органа управления к другому - функция родительского окна должна была управлять передачей фокуса ввода и организовывать взаимодействие органов управления самостоятельно. Диалоговые панели значительно упрощают использование органов управления, так как функция окна, соответствующая классу диалоговых панелей и расположенная внутри Windows, обеспечивает как взаимодействие органов управления между собой, так и их взаимодействие с приложением. В частности, эта функция обеспечивает передачу фокуса ввода от одного органа управления к другому при помощи клавиши <Tab> и клавиш перемещения курсора <Up> и <Down>, выполняет обработку сообщений от клавиш <Enter> и <Esc>. Что же касается расположения органов управления на поверхности диалоговой панели, то для этого можно использовать три способа. Первый способ предполагает включение в файл ресурсов приложения текстового описания шаблона диалоговой панели. Это описание можно создать при помощи любого текстового редактора: DIALOG_BOX DIALOG 25, 34, 152, 67 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Приложение DIALOG" BEGIN CTEXT "Microsoft Windows Application\n" "Приложение DIALOG\n (C) Frolov A.V., 1994", -1, 28, 9, 117, 26, WS_CHILD | WS_VISIBLE | WS_GROUP ICON "APPICON", -1, 6, 14, 16, 16, WS_CHILD | WS_VISIBLE DEFPUSHBUTTON "OK", IDOK, 56, 43, 36, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP END Не останавливаясь пока на деталях, отметим, что в приведенном выше описании определен шаблон диалоговой панели с идентификатором DIALOG_BOX (см. первую строку). Расположение и размеры диалоговой панели определяются цифрами, стоящими после оператора DIALOG. Вторая строка описания (оператор STYLE) предназначена для определения стиля временного окна, на поверхности которого будут расположены органы управления. Далее следует описание заголовка диалоговой панели (оператор CAPTION). Между строками BEGIN и END находится описание органов управления и пиктограмм. В нашем случае это статический орган управления (оператор CTEXT), пиктограмма (ICON) и кнопка (DEFPUSHBUTTON). Для каждого органа управления приводится вся необходимая информация - заголовок, стиль, расположение и размеры. Так как шаблон диалоговой панели описан в файле ресурсов, вы можете влиять на внешний вид и поведение диалоговой панели, изменяя файл ресурсов, но не исходный текст приложения. При использовании диалоговых панелей задача создания и размещения (а также взаимодействия) органов управления сильно упрощается. Отделяя описание органов управления от исходного текста приложения, вы не только упрощаете процесс программирования, но и получаете возможность создать локализованную версию приложения для любого национального языка без внесения изменений в исходные тексты приложения. Второй способ размещения органов управления на поверхности диалоговой панели предполагает использование специального редактора диалогов, такого как Borland Resource Workshop или Microsoft Dialog Editor. Эти редакторы позволяют нарисовать диалоговую панель и сохранить ее текстовое описание в файле ресурсов приложения. На рис. 3.1 показан процесс создания диалоговой панели, текстовое описание шаблона которой мы только что привели. С помощью мыши вы можете изменять размер и расположение диалоговой панели, размещать на ее поверхности органы управления, выбирая их из меню или из окна "Tools". Размеры органов управления можно изменять мышью, выделяя органы управления и перемещая их границы. При использовании специальных редакторов диалога у вас нет необходимости задавать для расположения и размеров органов управления численные значения.
Рис. 3.1. Создание диалоговой панели при помощи Borland Resource Workshop Такой подход в создании приложений носит зачатки визуального программирования, когда внешний вид и поведение приложения определяется с помощью специальных графических средств проектирования без традиционного программирования на каком-либо алгоритмическом языке. Визуальное программирование реализовано полностью в таких программных продуктах, как Borland Object Vision или Microsoft FoxPro for Windows 2.5. Специальные средства проектирования приложений Windows позволяют вам не только нарисовать диалоговые панели, но и "привязать", например, поля, предназначенные для ввода и отображения текста, к полям файлов баз данных. Вы можете создавать полноценные приложения Windows, которые работают с базами данных, не написав ни строчки исходного текста. Однако в виде "компенсации" за значительное упрощение процесса разработки вы можете получить снижение скорости работы приложения. Это связано с тем что универсальные средства работают, как правило, медленнее специализированных. Однако вернемся к диалоговым панелям, так как визуальное программирование заслуживает отдельного рассмотрения. Третий способ предполагает создание шаблона диалоговой панели в памяти во время работы приложения. Этот способ используется редко, обычно только в тех случаях, когда внешний вид диалоговой панели нельзя определить на этапе создания приложения. В операционной системе Windows версии 3.1 появились встроенные диалоговые панели, реализованные в виде библиотеки динамической загрузки commdlg.dll. Приложения могут вызывать стандартные диалоговые панели для работы с файлами (мы это делали в наших приложениях, см. например приложение OEM2ANSI), для выбора цветов и шрифтов, для работы с принтерами и текстовыми строками (поиск и замена строк в текстовых редакторах и текстовых процессорах). Хорошо знакомая вам функция MessageBox использует встроенные диалоговые панели, в которых могут находиться пиктограмма, статический орган управления (для отображения текста), а также одна или несколько кнопок. |