Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
7 - 8 лаба по оссп в исходнике отавлены нужные...doc
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
1 Мб
Скачать
☆

Определения элементов управления

Нижеследующий шаблон заголовка – это один или большее количество определений элементов управления, которые описывают элементы управления диалогового окна. И в стандартном и в расширенном шаблоне заголовок блока диалога имеет элемент, который указывает число элементов управления, определяемых в шаблоне. В стандартном шаблоне каждое определение элемента управления состоит из структуры DLGITEMTEMPLATE, сопровождаемой дополнительными массивами переменной длины. В расширенном шаблоне определения элемента управления используют формат DLGITEMTEMPLATEEX.

И в стандартном и в расширенном шаблоне определение элемента управления включает в себя следующую информацию:

1) размещение и габариты элемента управления;

2) стили окна и элемента управления для средств управления;

3) идентификатор элемента управления;

4) класс окна элемента управления. Это могут быть или порядковые значения предопределенного класса системы, или строка Unicode с нуль-терминатором на конце, которая определяет имя зарегистрированного класса окна;

5) строка Unicode с нуль-терминатором на конце, которая определяет начальный текст элемента управления, или перечисление значений, которые идентифицируют ресурс, тип пиктограммы в исполняемом файле;

6) необязательный переменной длины блок данных создания. Когда система создает элемент управления, она передает указатель на эти данные в параметре lParam сообщения WM_CREATE, которое передается в элемент управления.

В расширенном шаблоне определение элемента управления также выполняет идентификатор справочного контекста, который идентифицирует элемент управления, когда система посылает сообщение WM_HELP.

Задание размеров диалогового окна

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

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

Шаблон должен устанавливать начальные координаты верхнего левого угла диалогового окна. Обычно это координаты относительно верхнего левого угла рабочей области окна владельца. Когда шаблон устанавливает стиль DS_ABSALIGN или у диалогового окна нет владельца, позиция определяется относительно верхнего левого угла экрана. Windows устанавливает эту первоначальную позицию, когда создает диалоговое окно, но дает возможность прикладной программе регулировать позицию блока диалога перед его показом. Например, приложение может извлечь габариты окна владельца, вычислить новую позицию, в которую помещает диалоговое окно в окне владельца, а затем установить позицию, используя функцию SetWindowPos.

П р и м е р:

HWND hwndOwner;

RECT rc, rcDlg, rcOwner;

case WM_INITDIALOG:

if ((hwndOwner = GetParent(hDlg)) == NULL)

{

hwndOwner = GetDesktopWindow();

}

GetWindowRect(hwndOwner, &rcOwner);

GetWindowRect(hDlg, &rcDlg);

CopyRect(&rc, &rcOwner);

OffsetRect(&rcDlg, -rcDlg.left, -rcDlg.top);

OffsetRect(&rc, -rc.left, -rc.top);

OffsetRect(&rc, -rcDlg.right, -rcDlg.bottom);

SetWindowPos(hDlg,

HWND_TOP,

rcOwner.left + (rc.right / 2),

rcOwner.top + (rc.bottom / 2),

0, 0, // ignores size arguments

SWP_NOSIZE);

return TRUE;

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