Win32 API. Справочник по диалоговому окну
Страница 33. Псевдоструктура DLGTEMPLATEEX


Псевдоструктура DLGTEMPLATEEX

Структура DLGTEMPLATEEX не определена в каком-либо стандартном заголовочном файле. Определение структуры предусмотрено здесь, чтобы объяснить формат расширенного шаблона для диалогового окна.
Расширенный шаблон диалогового окна начинается с заголовка DLGTEMPLATEEX, который описывает блок диалога и определяет число органов управления в диалоговом окне. Для каждого элемента управления в блоке диалога, расширенный шаблон диалогового окна имеет блок данных, который использует формат DLGITEMTEMPLATEEX, чтобы описать орган управления.

//typedef struct {
//WORD dlgVer;
//WORD signature;
//DWORD helpID;
//DWORD exStyle;
//DWORD style;
//WORD cDlgItems;
//short x;
//short y;
//short cx;
//short cy;
//sz_Or_Ord menu; // название или порядковое число ресурса меню
//sz_Or_Ord windowClass; // название или порядковое число класса окна
//WCHAR title[titleLen]; // строка заголовка диалогового окна
//short pointsize; // только если установлен флаг DS_SETFONT
//short weight; // только если установлен флаг DS_SETFONT
//short bItalic; // только если установлен флаг DS_SETFONT
//WCHAR font[fontLen]; // название гарнитуры, если установлен флаг DS_SETFONT
//} DLGTEMPLATEEX;

Члены структуры
dlgVer
Указывает, не является ли шаблон расширенным шаблоном диалогового окна. Значение 0xFFFF указывает на расширенный шаблон блока диалога. В этом случае, член структуры signature определяет номер версии шаблона. Если dlgVer - любое другое значение, а не 0xFFFF, это - стандартный шаблон, который использует структуры DLGTEMPLATE и DLGITEMTEMPLATE.
signature
Определяет номер версии расширенного шаблона диалогового окна. Этот член структуры должен установить 1.
helpID
Определяет идентификатор контекста справки для окна блока диалога. Когда система отправляет сообщение WM_HELP, она передает это значение в член dwContextId структуры HELPINFO.
exStyle
Определяет расширенные стили для окна. Этот элемент структуры не используется для создания диалогового окна, однако, прикладные программы, которые используют шаблоны блока диалога, могут использовать его, чтобы создать другие типы окон.
style
Определяет стиль диалогового окна. Этот член структуры может быть комбинацией значений стиля окна (типа WS_CAPTION и WS_SYSMENU) и одного или нескольких следующих значений стиля блока диалога.

  • DS_3DLOOK - Предоставляет диалоговому окну не полужирный шрифт и чертит трехмерные рамки вокруг окон органов управления в блоке диалога.Стиль DS_3DLOOK требуется только прикладным программам, базирующимися на Win32, откомпилированным для версий Windows более ранних, чем Windows 95 или Windows NT 4.0. Система автоматически применяет трехмерный вид к диалоговым окнам, созданным прикладными программами, откомпилированными для текущих версий Windows.
  • DS_ABSALIGN - Указывает, что координаты диалогового окна - экранные координаты. Если этот стиль не определен, система обрабатывает их как координаты пользователя.
  • 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 - Указывает, что заголовок расширенного шаблона диалогового окна DLGTEMPLATEEX содержит четыре дополнительных члена (pointsize, weight, bItalic и font), которые описывают шрифт, использующийся для текста в рабочей области и органах управления блока диалога. Если возможно, система создает шрифт согласно значениям, заданным в этих членах. Затем система передает дескриптор шрифта в диалоговое окно и в каждый орган управления, отправляя им сообщение WM_SETFONT.Если этот стиль не определен, расширенный шаблон диалогового окна не включает члены pointsize, weight, bItalic и font.
  • DS_SETFOREGROUND - Вынуждает систему использовать функцию SetForegroundWindow, чтобы привести диалоговое окно в режим переднего плана.
  • DS_SYSMODAL - Создает системно - модальный блок диалога. Этот стиль вынуждает диалоговое окно иметь стиль WS_EX_TOPMOST. Иначе, он не имеет никакого влияния на блок диалога или поведение других окон в системе, когда блок диалога отображается на экране.

cDlgItems
Определяет число органов управления в диалоговом окне.
x
Определяет x-координату, в единицах измерения диалогового окна, левого верхнего угла блока диалога.
y
Определяет y-координату, в единицах измерения диалогового окна, левого верхнего угла блока диалога.
cx
Определяет ширину, в единицах измерения диалогового окна, блока диалога.
cy
Определяет высоту, в единицах измерения диалогового окна, блока диалога.
menu
Определяет массив переменной длины 16-разрядных элементов, который идентифицирует ресурс меню для диалогового окна. Если первый элемент этого массива - 0x0000, у блока диалога нет меню, а у массива нет других элементов. Если первый элемент - 0xFFFF, массив имеет один дополнительный элемент, который определяет порядковое значение ресурса меню в исполняемом файле. Если первый элемент имеет какое-либо другое значение, система обрабатывает массив как строку Уникода с нулевым символом в конце, которая определяет название ресурса меню в исполняемом файле.
windowClass
Определяет массив переменной длины 16-разрядных элементов, который идентифицирует класс диалогового окна. Если первый элемент этого массива является 0х0000, система использует предопределенный класс диалогового окна, а у массива нет других элементов. Если первый элемент является 0xFFFF, массив имеет один дополнительный элемент, который определяет порядковое значение предопределенного системного класса окна. Если первый элемент этого массива является каким-либо другим значением, система обрабатывает массив как строку Уникода с нулевым символом в конце, которая определяет название зарегистрированного класса окна.
title
Определяет строку Уникода с символом нуля в конце, которая содержит заголовок диалогового окна. Если первый элемент этого массива - 0x0000, у блока диалога нет никакого заголовка, а у массива нет никаких других элементов.
pointsize
Определяет размер шрифта в пунктах, который используется для текста в диалоговом окне и его органах управления. Члены pointsize, weight, bItalic и font присутствуют в расширенном шаблоне блока диалога, только тогда, если член структуры style определяет стиль DS_SETFONT.
weight
Определяет толщину шрифта в диапазоне от 0 до 1000. Она может быть любой из значений, перечисленных для члена lfWeight структуры LOGFONT. Этот член структуры присутствует, только тогда, если член style определяет DS_SETFONT.
bItalic
Указывает, является ли шрифт курсивным. Если это значение - ИСТИНА (TRUE), шрифт курсивный. Этот элемент структуры присутствует, только тогда, если член style определяет DS_SETFONT.
font
Определяет строку Уникода с символом нуля в конце, которая содержит название гарнитуры для шрифта. Этот элемент структуры присутствует, только тогда, если член style определяет DS_SETFONT.

Замечания
Вы можете использовать расширенный шаблон диалогового окна вместо стандартного шаблона блока диалога в функциях CreateDialogIndirectParam и DialogBoxIndirectParam и макрокомандах CreateDialogIndirect и DialogBoxIndirect. Стандартный шаблон диалогового окна использует структуры DLGTEMPLATE и DLGITEMTEMPLATE.
После заголовка в расширенном шаблоне диалогового окна DLGTEMPLATEEX располагаются одна или несколько структур DLGITEMTEMPLATEEX, которые описывают органы управления блока диалога. Член структуры cDlgItems определяет число структур DLGITEMTEMPLATEEX в шаблоне.
Каждая структура DLGITEMTEMPLATEEX в шаблоне должна быть выровнена по границе ДВОЙНОГО СЛОВА (DWORD). Если член style определяет стиль DS_SETFONT, первая структура DLGITEMTEMPLATEEX начинается на первой границе ДВОЙНОГО СЛОВА (DWORD) после строки font. Если стиль DS_SETFONT не установлен, первая структура начинается на первой границе ДВОЙНОГО СЛОВА (DWORD) после строки title.
Массивы menu, windowClass, title и font должны быть выровнены по границам СЛОВА (WORD).
Если Вы определяете строки символов в массивах menu, windowClass, title и font, Вы должны использовать строки Уникода. Чтобы создать код, который работает, и в Windows NT и в Windows 95, используйте функцию MultiByteToWideChar, чтобы генерировать эти строки Уникода.
Члены структуры x, y, cx, и cy определяют значения в единицах измерения диалогового окна. Вы можете преобразовать эти значения в экранные единицы измерения (пиксели), используя функцию MapDialogRect.

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

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

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

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