Диалоговое окно - это временное окно, которое создает приложение для обеспечения ввода пользователем данных. Приложения обычно используют диалоговые окна для запроса у пользователя дополнительных данных, необходимых для выполнения команд, инициированных пунктами меню. Диалоговое окно обычно содержит одно или более управляющих элементов (дочерних окон) с помощью которых пользователь вводит текст, выбирает какие-то действия и т.п.
ОС Windows также обеспечивает предопределенные диалоговые окна, которые поддерживают такие широко распространенные пункты меню как "Открыть" ("Open") или "Печать" ("Print").
Для создания и управления диалоговыми окнами существует много функций, сообщений и предопределенных управляющих элементов, которые облегчают процесс создания пользовательского интерфейса приложения.
Большинство приложений используют диалоговые окна для запроса дополнительных данных для команд меню, требующих ввода пользователем данных. Использование диалоговых окон является единственным рекомендуемым путем получения ввода данных.
|
|
Кроме этого, много приложений также используют диалоговые окна для отображения информации или дополнительных возможностей в то время, когда пользователь работает в другом окне (окно для поиска текста в текстовом редакторе).
Таким образом, диалоговые окна могут использоваться двояким образом: для однократного ввода данных, в этом случае они создаются - пользователь вводит данные - диалоговое окно уничтожается; для многократного использования, в этом случае диалоговые окна создаются и отображаются на экране до тех пор, пока не будет закрыто окно приложения или пользователь сам не закроет диалоговое окно. Из этого вытекает 2 типа диалоговых окон: модальные и немодальные.
Модальные диалоговые окна используются тогда, когда необходимо чтобы пользователь ввел данные или отказался от ввода данных, прежде чем приложение продолжит выполняться.
Немодальные диалоговые окна позволяют пользователю ввести необходимые данные и вернуться к предыдущей задаче не закрывая диалоговое окно.
Модальные диалоговые окна проще в управлении чем немодальные поскольку они создаются, выполняют свою задачу и закрываются с помощью вызова одной функции.
Для создания диалогового окна (независимо от его типа), приложение должно определить шаблон диалогового окна, в котором будет описываться стиль диалогового окна и его содержимое. Шаблон диалогового окна определяет его размеры, стиль окна и содержащиеся на нем элементы управления. Этот шаблон может создаваться во время выполнения программы или загружаться как ресурс из внешнего источника.
|
|
Шаблон диалогового окна в памяти состоит из заголовка, который описывает диалоговое окно и одного или нескольких дополнительных блоков данных, каждый из которых описывает какой-либо элемент управления на диалоговом окне.
Шаблон может использовать либо стандартный, либо расширенный формат.
В стандартном формате, заголовок представляет собой структуру типа DLGTEMPLATE (таблица 13), за которой следует дополнительные массивы данных переменной длины. Данные для каждого элемента управления состоят из структуры типа DLGITEMTEMPLATE (таблица 14), за которой следуют дополнительные массивы данных переменной длины.
Таблица 13 - Структура данных, описывающая диалоговое окно
DLGTEMPLATE Struc | Название поля | Тип в С | Тип в ассемблере | Назначение поля |
style; | DWORD | DD | Определяет стиль диалогового окна, может быть комбинацией значений стилей обычного окна (константы WS_) и стилей диалогового окна (константы DS_ определяются в заголовочном файле WinUser.h) | |
dwExtendedStyle | DWORD | DD | Определяет дополнительные стили окна. Этот элемент не используется при создании диалогового окна, однако приложения могут его использовать для создания других типов окон | |
cdit | WORD | DW | Определяет число элементов диалогового окна | |
x | short | DW | Определяет координату левого верхнего угла диалогового окна по горизонтали | |
y | short | DW | Определяет координату левого верхнего угла диалогового окна по вертикали | |
cx | short | DW | Определяет ширину диалогового окна | |
cy | short | DW | Определяет высоту диалогового окна |
Таблица 14 - Структура данных, описывающая управляющие элементы на диалоговом окне
DLGITEMTEMPLATE Struc | Название поля | Тип в С | Тип в ассемблере | Назначение поля |
style | DWORD | DD | Определяет стиль управляющего элемента, может быть комбинацией стиля окна (константы WS_) и одного или нескольких значений стиля управляющих элементов (кнопок - константы BS_ и т.п., значения констант определяются в заголовочном файле WinUser.h) | |
dwExtendedStyle | DWORD | DD | Определяет дополнительные стили окна | |
x | short | DW | Определяет координату левого верхнего угла управляющего элемента относительно левого верхнего угла диалогового окна по горизонтали | |
y | short | DW | Определяет координату левого верхнего угла управляющего элемента относительно левого верхнего угла диалогового окна по горизонтали | |
cx | short | DW | Определяет ширину управляющего элемента | |
cy | short | DW | Определяет высоту управляющего элемента | |
id | WORD | DW | Определяет идентификатор управляющего элемента |
Непосредственно вслед за каждой структурой DLGITEMTEMPLATE следует массив классов, определяющих классы окон управляющих элементов. Если первый элемент этого массива не равен значению 0xFFFF, ОС рассматривает этот массив как строку (заканчивающуюся нулем, в кодировке Unicode), определяющую имя зарегистрированного класса окна. Если первый элемент равен 0xFFFF значит, массив содержит один дополнительный элемент, который определяет один из системных классов (таблица 15).
Таблица 15 - Коды предопределенных системных управляющих элементов
Значение | Управляющий элемент |
0x0080 | Кнопка |
0x0081 | Поле ввода |
0x0082 | Статический текст |
0x0083 | Список |
0x0084 | Полоса прокрутки |
0x0085 | Поле типа "Combo box" |
Кроме этого, приложение также должно содержать процедуру диалогового окна, необходимую для выполнения действий, связанных с диалоговым окном. Процедура диалогового окна представляет собой процедуру обратного вызова, определенную приложением, которую вызывает ОС для ввода данных. Хотя процедура диалогового окна подобна оконной процедуре, у нее нет тех же самых обязанностей.