Ресурсы. Файл описания ресурса, страница 8

Блок памяти для диалогового окна, создаваемый с помощью опции ресурса DIALOGEX, состоит из заголовка DLGTEMPLATEEX, за которым следуют одна или несколько структур DLGITEMTEMPLATEEX с описанием элементов управления диалоговым окном. Число последующих структур DLGITEMTEMPLATEEX определяет член cDlgltems структуры DLGTEMPLATEEX.

Каждая структура DLGITEMTEMPLATEEX в шаблоне должна быть выровнена по границе двойного слова DWORD. Если член style определяет стиль DS_SETFONT или

DS_SHELLFONT, то первая структура DLGITEMTEMPLATEEX начинается с первой границы DWORD после строки typeface (гарнитура шрифта). Если эти стили не указаны, то первая структура начинается с первой границы DWORD после строки title (заголовок).

Массивы menu, windowClass, title и typeface должны быть выровнены по границам слова WORD и определены как строки Unicode. Для создания строк Unicode применяется функция MultiByteToWideChar.

Структуры данных определены в файле WINUSER.H. Определения этих структур приведены в листинге 8.1.

Листинг 8.1. Структурыданныхдиалоговогоокна_________________________________________

СМ.    \local-sources\chap08\t08-01.txt

Размеры и расположение диалогового окна и всех элементов управления должны быть указаны в базовых единицах длины диалогового окна. Эти единицы длины зависят от размера используемого шрифта. Размеры по вертикали измеряются в восьмых долях высоты шрифта, а размеры по горизонтали — в четвертых долях ширины шрифта. Смысл применения такой системы единиц длины состоит в обеспечении возможности правильно масштабировать диалоговое окно, независимо от разрешающей способности используемого экрана. Как правило, в мониторах с высокой разрешающей способностью используется большее число пикселей на символ, поэтому размер символа остается таким же, как и на мониторе с низкой разрешающей способностью. Побочным эффектом этой системы является то, что для изменения размеров диалогового окна достаточно просто выбрать другой шрифт. Для этой цели предусмотрен оператор FONT.

Все символьные элементы в шаблоне диалогового окна представляют собой массивы переменной длины "символов с расширенным представлением", иными словами, 16-разрядных символов Unicode. Массив минимального размера представляет собой одно 16-разрядное значение, которое представлено в шестнадцатиричном коде как 0x0000 и обозначает пустую строку. Если первый элемент имеет значение OxFFFF, то следующим элементом является 16-разрядный целый идентификатор, представляющий собой либо атомарное значение', либо идентификатор ресурса. Любые другие значения указывают на то, что массив представляет собой строку Unicode с нулевым символом в конце. В табл. 8.1 перечислены атомарные значения класса для определенных элементов управления.

Таблица 8. 1. Атомарныезначениядляопределенныхэлементовуправления

Значение

Описание

0X0080

Кнопка

0X0081

Элемент управления редактированием

0X0082

Статический элемент управления

0X0083

Список

0X0084

Линейка прокрутки

0X0085

Поле со списком

Описанияоператоровшаблонадиалоговогоокна

В настоящем разделе приведен полный список операторов, которые могут применяться в приложении для создания шаблона диалогового окна. В следующем листинге приведен шаблон для диалогового окна, показанного на рис. 8.1.

TESTDIALOG DIALOGEX  20, 20, 180, 70

STYLE DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU

CAPTION "Test Dialog"

FONT 8, "MS Sans Serif"

BEGIN

CHECKBOX      "Check box control.",IDC_CHECKBOX,9,7,70,10

GROUPBOX      "Radio Buttons",-1,7,21,86,39

RADIOBUTTON   "First", IDC_RADIO1,13,32 ,37 ,10 ,WS_GROUP | WS_TABSTOP

RADIOBUTTON   "Second",IDC_RADIO2,13,45,39,10