Win32 API. Справочник по диалоговому окну
Страница 30. Структура DLGTEMPLATE


Структура DLGTEMPLATE

Структура DLGTEMPLATE определяет габариты и стиль диалогового окна. Эта структура, всегда первая в стандартном шаблоне для блока диалога, а также определяет число органов управления в диалоговом окне и, следовательно, определяет число последующих структур DLGITEMTEMPLATE в шаблоне.

Синтаксис

typedef struct 
{
DWORD style;
DWORD dwExtendedStyle;
WORD cdit;
short x;
short y;
short cx;
short cy;
} DLGTEMPLATE;

Члены структуры
style
Определяет стиль диалогового окна. Этот член структуры может быть комбинацией значений стиля окна (таких как WS_CAPTION и WS_SYSMENU) и одного или большего количества следующих значений стиля блока диалога:

  • DS_3DLOOK - Дает диалоговому окну не полужирный шрифт и выводит трехмерные рамки вокруг окон органа управления в блоке диалога. Стиль DS_3DLOOK требуется только прикладным программам, базирующимся на Win32, откомпилированным для версий Windows более ранних, чем Windows 95 или Windows NT 4.0. Система автоматически применяет трехмерный вид к диалоговым окнам, созданным прикладными программами, откомпилированными для текущих версий Windows.
  • DS_ABSALIGN - Указывает, что координаты диалогового окна - экранные координаты. Если этот стиль не определен, Windows предполагает, что они - координаты рабочей области.
  • DS_CENTER - Центрирует диалоговое окно в рабочей области; то есть в области, не затененной блоком.
  • DS_CENTERMOUSE - Центрирует курсор мыши в диалоговом окне.
  • DS_CONTEXTHELP - Включает вопросительный знак в строку заголовка диалогового окна. Когда пользователь щелкает по вопросительному знаку, курсор изменяется на вопросительный знак с указателем. Если пользователь затем щелкает по органу управления в диалоговом окне, элемент управления принимает сообщение WM_HELP. Орган управления должен передать сообщение в процедуру диалогового окна, которая должна вызвать функцию WinHelp, используя команду HELP_WM_HELP. Прикладная программа Справка (Help) отображает на экране выскакивающее окно, которое обычно содержит справку для органа управления. Обратите внимание, что DS_CONTEXTHELP - только символ- заменитель шаблона. Когда создается диалоговое окно, система проверяет наличие флажка включения для DS_CONTEXTHELP и, если он имеется, прибавляет WS_EX_CONTEXTHELP к расширенному стилю блока диалога. WS_EX_CONTEXTHELP не может быть использован со стилями WS_MAXIMIZEBOX или WS_MINIMIZEBOX.
  • DS_CONTROL - Создает диалоговое окно, которое работает также как дочернее окно другого диалогового окна, очень похоже на страницу в окне свойств. Этот стиль позволяет пользователю перемешаться при помощи клавиши TAB среди органов управления окна дочернего блока диалога, использовать его клавиши - ускорители и так далее.
  • DS_FIXEDSYS - Вынуждает диалоговое окно использовать SYSTEM_FIXED_FONT вместо значения по умолчанию SYSTEM_FONT. SYSTEM_FIXED_FONT - шрифт фиксированной ширины, совместимый с Системным шрифтом в версиях Windows ранее чем 3.0.
  • DS_LOCALEDIT - Применяется только в 16-разрядных прикладных программах. Этот стиль предписывает полям редактирования в диалоговом окне распределять память из сегмента данных прикладной программы. Иначе, редактируемые поля распределяют память для хранения данных из объекта глобальной памяти.
  • DS_MODALFRAME - Создает диалоговое окно с рамкой модального блока диалога, которая может быть объединена со строкой заголовка и Системным меню, путем установки стилей WS_CAPTION и WS_SYSMENU.
  • DS_NOFAILCREATE - Только для Windows 95: Создает диалоговое окно, даже если происходят ошибки - например, если дочернее окно не может быть создано или, если система не может создать специальный сегмент данных для поля редактирования.
  • DS_NOIDLEMSG - Подавляет сообщения WM_ENTERIDLE, которые Windows, иначе передал бы владельцу диалогового окна, в то время когда блок диалога отображался на экране.
  • DS_SETFONT - Указывает, что заголовок шаблона блока диалога содержит дополнительные данные, определяющие шрифт, который используется для текста в рабочей области и органах управления диалогового окна. Данные о шрифте начинаются по границе слова (WORD), которая следует за массивом заголовка. Они определяет 16-разрядное значение размера в пунктах и строку с именем шрифта Уникода. Если возможно, система создает шрифт согласно заданным величинам. Затем система передает дескриптор шрифта в блок диалога и в каждый орган управления, отправляя им сообщение WM_SETFONT. Если этот стиль не определен, шаблон диалогового окна не включает данные о шрифте.
  • DS_SETFOREGROUND - Вынуждает систему использовать функцию SetForegroundWindow, чтобы привести диалоговое окно в активный режим.
  • DS_SYSMODAL - Создает системно - модальный блок диалога. Этот стиль заставляет диалоговое окно иметь стиль WS_EX_TOPMOST, а в остальном, он не оказывает никакого влияния на блок диалога или поведение других окон в системе, когда диалоговое окно показывается на экране.

dwExtendedStyle
Определяет расширенные стили для окна. Этот член структуры не используется для создания диалогового окна, но прикладные программы, которые используют шаблоны блока диалога, могут использовать его, чтобы создать другие типы окон.
cdit
Определяет число элементов в диалоговом окне.
x
Устанавливает x-координату, в единицах измерения диалогового окна, левого верхнего угла блока диалога.
y
Устанавливает y-координату, в единицах измерения диалогового окна, левого верхнего угла блока диалога.
cx
Устанавливает ширину, в единицах измерения диалогового окна, блока диалога.
cy
Устанавливает высоту, в единицах измерения диалогового окна, блока диалога.

Замечания
В стандартном шаблоне для блока диалога, структура DLGTEMPLATE всегда непосредственно сопровождается тремя массивами переменной длины, которые определяют меню, класс и заголовок для диалогового окна. Когда дается стиль DS_SETFONT, эти массивы сопровождаются к тому же 16-разрядным значением, определяющим размер в пунктах, а другой массив переменной длины определяет название шрифта. Каждый массив состоит из одного или большего числа 16-разрядных элементов. Меню, класс, заголовок и массивы шрифта должны быть выровнены по границам СЛОВА (WORD).
Непосредственно после структуры DLGTEMPLATE - массив меню, который идентифицирует ресурс меню для блока диалога. Если первый элемент этого массива - 0x0000, у диалогового окна нет никакого меню, и массив не имеет никаких других элементов. Если первый элемент - 0xFFFF, массив имеет один дополнительный элемент, который определяет порядковое значение ресурса меню в исполняемом файле. Если первый элемент имеет какое-либо другое значение, система обрабатывает массив как строку Уникода с нулевым символом в конце, которая определяет название ресурса меню в исполняемом файле.
После массива меню - массив класса, который идентифицирует класс окна органа управления. Если первый элемент массива - 0x0000, система использует предопределенный класс диалогового окна для блока диалога, и массив не имеет никаких других элементов. Если первый элемент - 0xFFFF, массив имеет один дополнительный элемент, который определяет порядковое значение предопределенного системного класса окна. Если первый элемент имеет любое другое значение, система обрабатывает массив как строку Уникода с нулевым символом в конце, которая устанавливает имя зарегистрированного класса окна.
После массива класса - массив заголовка, определяющий строку Уникода с нулевым символом в конце, которая содержит заголовок диалогового окна. Если первый элемент этого массива - 0x0000, диалоговое окно не имеет никакого заголовка, а массив не имеет никаких других элементов.
16-разрядное значение размера шрифта в пунктах и массив шрифта следуют за массивом заголовка, но только тогда, если элемент style структуры определяет стиль DS_SETFONT. Значение кегля в пунктах определяет размер в пунктах шрифта, который используется для текста в диалоговом окне и его органах управления. Массив шрифта является строкой Уникода с нулевым символом в конце, определяющей название гарнитуры для шрифта. Когда эти значения даются, Windows создает шрифт, имеющий данный размер и гарнитуру (если возможно) и отправляет сообщение WM_SETFONT процедуре диалогового окна и оконным процедурам элементов управления, поскольку оно создает блок диалога и органы управления.
После заголовка DLGTEMPLATE в стандартном шаблоне диалогового окна имеется одна или несколько структур DLGITEMTEMPLATE, которые определяют габариты и стиль органов управления в блоке диалога. Член структуры cdit определяет число структур DLGITEMTEMPLATE в шаблоне. Эти структуры DLGITEMTEMPLATE должны быть выровнены по границам ДВОЙНОГО СЛОВА (DWORD).
Если Вы определяете строки символов в меню, классе, заголовке, или массивах шрифта, Вы должны использовать строки Уникода. Чтобы создать код, который работает, и в Windows NT, и в Windows 95, используйте функцию MultiByteToWideChar, чтобы генерировать эти строки Уникода.
Члены структуры x, y, cx, и cy устанавливают значения в единицах измерения диалогового окна. Вы можете преобразовывать эти значения в экранные единицы измерения (пиксели), используя функцию MapDialogRect.

Смотри также
CreateDialogIndirect, CreateDialogIndirectParam, DialogBoxIndirect, DialogBoxIndirectParam, DLGITEMTEMPLATE, DLGITEMTEMPLATEEX, DLGTEMPLATEEX, MapDialogRect, MultiByteToWideChar

Размещение и совместимость DLGTEMPLATE

Windows NTДа 
Win95Да
Win32sДа
Импортируемая библиотека-
Заголовочный файлwinuser.h
UnicodeНет
Замечания по платформеНе имеется

 
« Предыдущая статья   Следующая статья »