- •Часть II. Проектирование пользовательских интерфейсов средствами win32 api п 1. Основы приложений для Windows. П 1.1 Типы данных Windows.
- •П. 1.2 Главная функция приложения WinMain().
- •П. 1.3 Оконная функция.
- •П. 1.4 Сообщения от окна
- •П. 1.5 Сообщения от мыши
- •1.5.1 Сообщения мыши, связанные с рабочей областью окна
- •1.5.3 Двойные щелчки мыши
- •1.5.4 Сообщения мыши, связанные с нерабочей областью окна
- •1.5.5 Захват мыши
- •П. 1.6 Сообщения от клавиатуры
- •1.6.1 Синхронизация событий клавиатуры
- •1.6.2 Игнорирование событий клавиатуры
- •1.6.3 Понятие фокуса ввода
- •1.6.4 Категории клавиатурных сообщений
- •1.6.5 Аппаратные сообщения
- •1.6.6 Символьные сообщения
- •П. 1.7 Таймеры Windows и служба времени.
- •П. 1.8 Классы окон
- •1.8.1. Описание используемых классом окон ресурсов
- •1.8.2. Регистрация класса окон
- •1.8.3. Создание окон
- •1.8.4. Стили окна
- •П. 1.9 Цикл обработки сообщений
- •П. 1.10 Структура текста приложения
- •П. 1.11 Вспомогательные функции создания окон
- •1.11.1 Функции отображения и перерисовки окон
- •1.11.2 Функции поиска и определения состояния окон
- •1.11.3 Функции перемещения окон
- •1.11.4 Сообщения приложения для пользователя
- •П. 1.12 Примеры создания окон
- •П 2. Органы управления
- •П 2.1. Кнопки
- •2.1.1. Создание кнопок
- •2.1.2. Кнопки и сообщения
- •2.1.3. Флажки и переключатели
- •П 2.2. Статический орган управления
- •П 2.3. Полоса прокрутки
- •2.3.1. Общие сведения
- •2.3.2. Создание полосы прокрутки
- •2.3.3. Простейшие полосы прокрутки
- •2.3.4. Сообщения от полосы прокрутки
- •2.3.5. Управление полосой прокрутки
- •П 2.4 Редактор текста
- •2.4.1. Создание редактора
- •2.4.2. Сообщения для редактора текста
- •2.4.3. Сообщения от редактора текста
- •П 2.5. Списки строк
- •2.5.1. Создание списка
- •2.5.2. Сообщения от списка
- •2.5.3. Сообщения для списка
- •П. 2.6. Комбинированный список
- •2.6.1. Создание комбинированного списка
- •2.6.2. Коды извещения
- •2.6.3. Сообщения для комбинированного списка
- •П 3. Вывод в окно
- •П. 3.1. Виды контекста отображения
- •П 3.2. Сообщение wm_paint
- •П 3.3. Установка атрибутов контекста отображения для текста
- •П 3.4. Вывод текста
- •3.4.1. Настройка параметров шрифта
- •3.4.2. Выбор шрифта в контекст отображения
- •3.4.3. Функции вывода текста
- •3.4.4. Определение метрик шрифта
- •П 3.5. Рисование геометрических фигур
- •3.5.1 Установка атрибутов контекста отображения для рисования.
- •3.5.1. Функции рисования точки
- •3.5.2. Функции рисования линий
- •3.5.3. Функции рисования замкнутых фигур
- •3.5.4 Функции создания и рисования регионов
- •П. 4 Ресурсы приложения и их использование. П. 4.1 Файл ресурсов.
- •П 4.2 Главное меню
- •П. 4.2.1 Элементы меню
- •П. 4.2.2 Создание меню
- •П. 4.2.3 Сообщения от меню
- •П. 4.3. Плавающее меню
- •П. 4.4. Акселераторы
- •П. 4.5. Панель инструментов
- •4.5.1. Создание панели инструментов
- •4.5.2. Управление состоянием кнопок панели
- •4.5.3. Вывод подсказок в панели инструментов
- •П. 4.6. Строка состояния
- •4.6.1. Создание строки состояния
- •4.6.2. Сообщения о меню в строке состояний
- •П 5. Диалоговые панели п. 5.1. Характеристики диалоговых панелей
- •5.1.1. Единицы диалоговой панели '
- •5.1.2. Стили диалоговой панели
- •5.1.3. Функция окна диалоговой панели
- •П. 5.2. Создание диалоговой панели
- •5.2.1 Создание окна модальной диалоговой панели
- •5.2.2 Создание окна немодальной диалоговой панели
- •П. 5.3 Разработка и компоновка диалоговых панелей.
- •П. 5.4 Сообщения и диалоговые панели
- •П. 5.5. Стандартные диалоговые панели
- •5.5.1. Панели для открытия или сохранения файлов
- •5.5.2. Панель для выбора цветов
- •5.5.3. Панель для выбора шрифта
П 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. Стили диалоговой панели
Диалоговые панели бывают следующих трех типов:
-
Модальные. Приложение приостанавливает свою работу на время активизации собственной модальной диалоговой панели. Функции всех окон (включая их дочерние окна) этого приложения блокируют. Поэтому панели нельзя создавать на базе дочерних окон.
-
Системные модальные. После запуска системной модальной диалоговой панели приостанавливают работу все приложения. Пока эта панель находится на экране, нельзя переключиться на работу с другими приложениями.
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 задают, только если есть гарантия наличия и поддержки требуемого шрифта.