Диалоговые окна

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

ОС 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"

Кроме этого, приложение также должно содержать процедуру диалогового окна, необходимую для выполнения действий, связанных с диалоговым окном. Процедура диалогового окна представляет собой процедуру обратного вызова, определенную приложением, которую вызывает ОС для ввода данных. Хотя процедура диалогового окна подобна оконной процедуре, у нее нет тех же самых обязанностей.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: