Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект лекций Часть II.doc
Скачиваний:
14
Добавлен:
20.11.2018
Размер:
1.48 Mб
Скачать

П 5. Диалоговые панели п. 5.1. Характеристики диалоговых панелей

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

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

5.1.1. Единицы диалоговой панели '

Диалоговые панели используют специальную систему измерения размеров панели и органов управления на ее поверхности. В этой системе единицы ширины и высоты определяют шириной и высотой используемого в панели шрифта. Одна диалоговая единица ширины составляет четверть средней ширины символов, а высоты – восьмую часть высоты символов системного шрифта.

Размер диалоговой единицы получают при помощи функции GetDialogBaseUnits:

LONG GetDialogBaseUnits(VOID);

Она возвращает 32-разрядное значение, младшее слово которого равно единице ширины, а старшее слово – единице высоты.

Удобно пользоваться средними значениями ширины и высоты шрифта в диалоговых единицах. Эти значения можно вычислить следующим образом:

//Определяем среднюю ширину и высоту шрифта в пикселях

int cxChar, cyChar;

{

TEXTMETRIC tm;

HDC hdc=GetDC(hwnd);

GetTextMetrics(hdc,&tm};

ReleaseDC(hwnd,hdc);

cxChar=tm.tmAveCharWidth+1;

cyChar=tm.tmHeight+tm.tmExternalLeading;

}

//Определяем диалоговые единицы ширины и высоты

DWORD dfgunit =GetDialogBaseUnits();

int dlgwunit=LOWORD(dlgunit);

dlghunit=HIWORD(dlgunit);

//Пересчитываем габариты символов шрифта

cxChar=cxChar*4/dlgwunit;

cyChar=cyChar*8/dlghunit;

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

5.1.2. Стили диалоговой панели

Диалоговые панели бывают следующих трех типов:

  1. Модальные. Приложение приостанавливает свою работу на время активизации собственной модальной диалоговой панели. Функции всех окон (включая их дочерние окна) этого приложения блокируют. Поэтому панели нельзя создавать на базе дочерних окон.

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

3. Немодальные. Немодальная диалоговая панель не блокирует ничью работу. Обычно ее создают один раз. Затем при необходимости ее скрывают или отображают с помощью функции ShowWindow. Немодальную панель разрушают функцией DestroyWindow.

Диалоговые панели 1-го и 2-го типа для завершения собственного цикла обработки сообщений и разрушения панели в теле функции своего окна должны содержать вызов функции EndDialog.

Значение стиля панели задают комбинацией констант с префиксом WS_ и с префиксом DS_ из следующей таблицы.

Таблица стилей диалоговых панелей

Стиль

Пояснение к стилю панели

DS_3DLOOK

Этот стиль используют по умолчанию в приложениях Win32

DS_ABSALIGN

Координаты отсчитывать от левого верхнего угла экрана. Иначе отсчет ведется от левого верхнего угла рабочей области

DS CENTER

Центрировать панель на экране

DS CENTERMOUSE

Центрировать курсор мыши в панели

DS_CONTEXTHELP

В заголовке окна панели отобразить кнопку с вопросительным знаком. При ее нажатии курсор мыши принимает вид указателя с вопросительным знаком. Если затем нажать левую клавишу мыши над элементом панели, то функция окна панели получит сообщение WM_HELP. При его обработке нужно вызвать функцию WinHelp, указав третьим аргументом HELP_WM_HELP. Тогда отображается подсказка над этим органом управления

DS_CONTROL

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

DS_FIXEDSYS

Вместо шрифта SYSTEM FONT загрузить шрифт SYSTEM_FIXEDFONT

DS_MODALFRAME

Модальная панель. Обычно комбинируют с константами WS CAPTION nWS_SYSMENU

DS_NOFAILCREATE

Панель создавать, даже если возникли ошибки создания его органов управления

DS_NOIDLEMSG

Функции окна – владельца панели не посылать сообщение WM_ENTERIDLE. Иначе это сообщение будет послано в момент отображения панели

DS_RECURSE

Стиль панели подобен стилю органов управления

DS_SETFONT

Шаблон панели должен содержать размер и имя шрифта. Иначе будет использован системный шрифт

DS_ SETFOREGROUND

Панель всегда на переднем плане

DS_SYSMODAL

Системная модальная панель

В стиле панели чаще других используют константы WS POPUP WS_BORDER, WS__SYSMENU, WS_CAPTION и DS_MODALFRAME. Если диалоговая панель имеет рамку, но не имеет заголовка, используют константу WS_DLGFRAME.

Константу DS_SETFONT задают, только если есть гарантия наличия и поддержки требуемого шрифта.