Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Ch-11.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.26 Mб
Скачать

Шаблон окна диалога

Первой задачей, которую нужно решить для добавления в программу окна диалога, является создание шаблона окна диалога. Этот шаблон может быть помещен прямо в файл описания ресурсов, или он может быть создан в отдельном файле, для которого по договоренности используется расширение .DLG (dialog). При создании для шаблона отдельного файла, в файл описания ресурсов включается строка:

rcinclude filename.dlg

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

Шаблон окна диалога программ ABOUT1 выглядит следующим образом:

AboutBox DIALOG 20, 20, 160, 80

STYLE WS_POPUP | WS_DLGFRAME

{

CTEXT "About1" -1, 0, 12, 160, 8

ICON "About1" -1, 8, 8, 0, 0

CTEXT "About Box Demo Program" -1, 0, 36, 160, 8

CTEXT "(c) Charles Petzold, 1996" -1, 0, 48, 160, 8

DEFPUSHBUTTON "OK" IDOK,64,60, 32, 14, WS_GROUP

}

В первой строке окну диалога дается имя (в данном случае AboutBox). Как и для других ресурсов, вместо имени можно использовать число. За именем следует ключевое слово DIALOG и четыре числа. Первые два — являются координатами х и у верхнего левого угла окна диалога относительно рабочей области родительского окна при вызове окна диалога программой. Вторые два числа — это ширина и высота окна диалога.

Эти координаты и размеры даются не в пикселях. Значения координат и размеров базируются на специальной системе координат, используемой только для шаблонов окон диалога. Числа основываются на размере символа системного шрифта: координата х и ширина выражены в единицах, равных 1/4 средней ширины символа; координата у и высота выражены в единицах, равных 1/8 высоты символа. Таким образом, для данного приведенного окна диалога верхний левый угол окна диалога находится на расстоянии 5 символов от левого края рабочей области родительского окна и на расстоянии 2,5 символов от ее верхнего края. Ширина окна диалога равна 40 символам, а высота – 10 символам.

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

Функция GetDialogBaseUnits позволяет определять размеры системного шрифта, которые используются менеджером окна диалога. Для стандартного монитора VGA (самого часто используемого видеоадаптера в Windows) функция GetDialogBaseUnits возвращает ширину символа равную 8 и высоту равную 16 единицам. Поскольку единицы окна диалога соответствуют 1/4 средней ширины символа и 1/8 его высоты, то каждая единица соответствует 2 пикселям монитора VGA. Если идея использования таких единиц измерения окна диалога временами кажется слишком абстрактной, то лучше просто запомнить это правило.

Инструкция STYLE шаблона напоминает поле стиля функции CreateWindow. Использование WS_POPUP и WS_DLGFRAME вполне обычно для модальных окон диалога, хотя в дальнейшем мы изучим несколько альтернативных идентификаторов.

Внутри фигурных скобок определяются те дочерние окна элементов управления, которые появятся в окне диалога. В нашем окне диалога используются дочерние окна элементов управления трех типов: CTEXT (текст, выровненный по центру), ICON (значок) и DEFPUSHBUTTON (кнопка, выбираемая по умолчанию). Формат инструкций описания следующий:

control-type "text" id, xPos, yPos, xWidth, yHeight [, iStyle]

Значение iStyle в конце инструкции не является обязательным; оно задает дополнительные стили окна, используя идентификаторы, заданные в заголовочных файлах Windows.

Идентификаторы CTEXT, ICON и DEFPUSHBUTTON используются исключительно в окнах диалога. Они являются сокращенной формой записи идентификаторов класса окна и стиля окна. Например, CTEXT показывает, что класс дочернего окна элементов управления — это "static", а стиль такой:

WS_CHILD | SS_CENTER | WS_VISIBLE | WS_GROUP

Если с идентификатором WS_GROUP мы сталкиваемся впервые, то стили окна WS_CHILD, SS_CENTER и WS_VISIBLE уже встречались нам в главе 8 при создании статических дочерних окон элементов управления в программе COLORS1.

Что касается значка, то текстовое поле — это имя ресурса значка в программе, который также определен в файле описания ресурсов программы ABOUT1. Текстовое поле кнопки — это тот текст, который появится внутри кнопки на экране. Этот текст аналогичен тексту, заданному во втором параметре функции CreateWindow, которая вызывается при создании в программе дочернего окна элемента управления.

Поле id представляет собой число, с помощью которого дочернее окно идентифицирует себя при посылке сообщений (обычно эти сообщения WM_COMMAND) своему родительскому окну. Родительским окном этих дочерних окон элементов управления является само окно диалога, которое посылает эти сообщения оконной процедуре, находящейся внутри Windows. Эта оконная процедура посылает эти сообщения процедуре диалогового окна, которая включается в вашу программу. Значения id аналогичны идентификаторам дочерних окон, которые использовались в функции CreateWindow при создании в главе 8 дочерних окон. Поскольку дочерние окна с текстом и значком не посылают сообщений обратно родительскому окну, эти значения для них устанавливаются равными —1. Значение id для кнопки устанавливается равным IDOK, который в заголовочных файлах Windows определяется как 1.

Следующие четыре числа задают положение дочернего окна элемента управления (относительно верхнего левого угла рабочей области окна диалога) и его размер. Положение и размер выражены в единицах, равных 1/4 средней ширины и 1/8 высоты символа системного шрифта. В инструкции ICON высота и ширина игнорируются.

Инструкция DEFPUSHBUTTON шаблона окна диалога в дополнение к стилю окна, заданному ключевым словом DEFPUSHBUTTON, включает в себя стиль окна WS_GROUP. О стиле WS_GROUP (и стиле WS_TABSTOP) будет рассказано несколько позже, при обсуждении второй версии рассмотренной ранее программы — ABOUT2.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]