3.1.
3.2.
3.3.
3.4.
В предыдущей главе мы научили вас создавать в главном окне приложения различные органы управления, такие как кнопки, списки, полосы просмотра и т. п. Однако обычно для объединения органов управления используются временные (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". Размеры органов управления можно изменять мышью, выделяя органы управления и перемещая их границы. При использовании специальных редакторов диалога у вас нет необходимости задавать для расположения и размеров органов управления численные значения.