- •Часть 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.3. Панель для выбора шрифта
Для выбора шрифта вызывают функцию ChooseFont. Эта функциясоздает стандартную панель выбора атрибутов логического шрифта. Атрибуты определяют имя шрифта, стиль (полужирный, наклонный или обычный), размер, вид (подчеркнутый, зачеркнутый или цветной) и набор символов. В процессе выбора, еще до нажатия кнопки ОК, пользователь в поле образца может увидеть результаты своего выбора. Функция ChooseFont объявлена следующим образом:
BOOL ChooseFont( LPCHOOSEFONT Ipcf);
Параметр Ipcf указывает на структуру типа CHOOSEFONT, которая содержит данные инициализации панели. После нажатия кнопки ОК эта структура будет дополнена данными о выбранном шрифте.
Иначе возвращаемое значение равно нулю.
Структура CHOOSEFONT описана следующим образом: typedef struct { DWORD IStructSize;
HWND hwndOwner;
HDC hDC;
LPLOGFONT IpLogFont;
INT iPointSize;
DWORD Flags;
DWORD rgbColors;
LPARAM ICustData;
LPCFHOOKPROC IpfnHook;
LPCTSTR IpTemplateName;
HINSTANCE hlnstance;
LPTSTR pszStyle;
WORD nFontType;
WORD MISSING_ALIGNMENT_;
INT nSizeMin;
INT nSizeMax;
} CHOOSEFONT;
Рассмотрим назначение полей структуры CHOOSEFONT:
1. IStructSize задает длину структуры CHOOSEFONT в байтах.
2. hwndOwner - дескриптор окна - владельца панели.
3. Flags - флаги инициализации панели. Можно использовать комбинацию значений из нижеследующей таблицы.
Флаг |
Пояснение |
CF_BOTH |
В списке шрифтов перечислить экранные и принтерные шрифты. Поле hDC должно указывать на принтер |
CF_TTONLY |
В списке шрифтов перечислить лишь масштабируемые шрифты True Type |
CFJEFFECTS |
Можно выбирать цвет букв и подчеркнутые и перечеркнутые шрифты |
CF_FIXEDPITCHONLY |
В списке шрифтов перечислить лишь шрифты с фиксированной шириной |
CF_FORCEFONTEXIST |
Предупреждать при попытке выбора несуществующего шрифта |
CF INlTTOLOGFONTSTRUCT |
Значение поля ipLogFont использовать при инициализации панели |
CF_LIMITSIZE |
Размеры шрифта ограничить значениями полей nSizeMin и nSizeMax |
CF_NOOEMFONTS или CF NOVECTORFONTS |
Запретить выбор векторных шрифтов |
CF_NOFACESEL |
Игнорировать выбор в списке имен шрифтов |
CF NOSTYLESEL |
Игнорировать выбор стиля шрифта |
CF NOSIZESEL |
Игнорировать выбор размера шрифта |
CF NOSIMULATIONS |
Запрещается эмуляция шрифтов |
CF_NOVERTFONTS |
В списке шрифтов перечислить лишь горизонтально ориентированные шрифты |
CF_PRINTERFONTS |
В списке шрифтов перечислить только шрифты принтера, контекст отображения которого задан в поле hDC |
CF_SCALABLEONLY |
В списке шрифтов перечислить лишь масштабируемые и векторные шрифты |
CF_SCREENFONTS |
В списке шрифтов перечислить лишь экранные шрифты системы |
CF_USESTYLE |
Строка "lpszStyle" указывает на буфер, который содержит описание стиля. Эта строка используется для инициализации списка стилей панели |
CFJVYSIWYG |
Можно выбирать шрифты, доступные и для отображения на экране, и для печати на принтере. Следует установить флаги CF BOTH и CF_SCALABLEONLY |
4. hDC - дескриптор контекста устройства, чьи шрифты будут перечислены в панели. Этот дескриптор указывают, только если задан флаг CF_BOTH или CF_PRINTERFONTS.
5. lpLogFont указывает на структуру типа LOGFONT. Если установлен флаг CFJNITTOLOGFONTSTRUCT и инициализирована эта структура, то параметры структуры будут использованы при установке начального состояния панели. После нажатия кнопки ОК. в эту структуру будут записаны данные выбранного шрифта.
6. iPointSize будет содержать размер букв выбранного шрифта в десятых долях пункта.
7. rgbCoIors - цвет символов шрифта, который будет выбран в комбинированном списке "Цвет текста" сразу после отображения панели. Должен быть установлен флаг CFEFFECTS. После выбора шрифта это поле содержит значение выбранного цвета.
8. ICustData - данные, передаваемые функции фильтра, определенной содержимым поля lpftiHook.
9. lpfnHook - указатель на функцию фильтра, которая может обрабатывать сообщения, предназначенные для панели. Этот член игнорируется, если не установлен флаг CFENABLEHOOK.
lO.lpTempIateName - указатель на строку с именем ресурса шаблона панели в модуле, идентифицированном полем hlnstance.
11. hlnstance - дескриптор блока памяти с шаблоном панели (если установлен флаг CF_ENABLETEMPLATEHANDLE) или дескриптор модуля, содержащего ресурс шаблона панели (если установлен флаг CF_ENABLETEMPLATE). Иначе это поле игнорируется.
12. lpszStyle - указатель на буфер, который содержит данные стиля. Если установлен флаг CFUSESTYLE, данные этого буфера инициализируют список стилей шрифта на панели. После выбора шрифта в этот буфер записывается выбранный стиль.
13.nFontType определяет тип выбранного шрифта. Может содержать комбинацию следующих констант:
Константа |
Пояснение к шрифту |
|
BOLD_FONTTYPE |
Полужирный. Эта информация дублирована полем ifWeight |
|
ITALIC_FONTTYPE |
Наклонный. Эта информация дублирована полем lfltalic |
|
PRINTER FONTTYPE |
Встроенный шрифт принтера |
|
REGULAR_FONTTYPE |
Обычная жирность. Эта информация дублирована полем IfWeight |
|
SCREEN FONTTYPE |
Шрифт - экранный шрифт |
|
SIMULATED FONTTYPE |
Шрифт моделирует GDI |
14. nSizeMin - минимальный размер шрифта, который можно выорать. Для использования этого поля необходимо установить флаг CFJJMITSIZE.
15. nSizeMax - максимальный размер шрифта, который можно выбрать. Для использования этого поля необходимо установить флаг CFJLIMITSIZE.
Содержание
П 1. Основы приложений для Windows. 1
П 1.1 Типы данных Windows. 1
П. 1.2 Главная функция приложения WinMain(). 1
П. 1.3 Оконная функция. 2
П. 1.4 Сообщения от окна 2
П. 1.5 Сообщения от мыши 3
1.5.1 Сообщения мыши, связанные с рабочей областью окна 3
1.5.2 Обработка нажатия клавиш <Shift> и <Ctrl> и кнопок мыши 4
1.5.3 Двойные щелчки мыши 5
1.5.4 Сообщения мыши, связанные с нерабочей областью окна 5
1.5.5 Захват мыши 6
П. 1.6 Сообщения от клавиатуры 6
1.6.1 Синхронизация событий клавиатуры 6
1.6.2 Игнорирование событий клавиатуры 7
1.6.3 Понятие фокуса ввода 7
1.6.4 Категории клавиатурных сообщений 8
1.6.5 Аппаратные сообщения 8
1.6.6 Символьные сообщения 9
П. 1.7 Таймеры Windows и служба времени. 10
П. 1.8 Классы окон 13
1.8.1. Описание используемых классом окон ресурсов 13
1.8.2. Регистрация класса окон 14
1.8.3. Создание окон 15
1.8.4. Стили окна 16
П. 1.9 Цикл обработки сообщений 17
П. 1.10 Структура текста приложения 18
П. 1.11 Вспомогательные функции создания окон 19
1.11.1 Функции отображения и перерисовки окон 20
1.11.2 Функции поиска и определения состояния окон 20
1.11.3 Функции перемещения окон 21
1.11.4 Сообщения приложения для пользователя 23
П. 1.12 Примеры создания окон 25
П 2. Органы управления 29
П 2.1. Кнопки 30
2.1.1. Создание кнопок 30
2.1.2. Кнопки и сообщения 30
2.1.3. Флажки и переключатели 32
П 2.2. Статический орган управления 32
П 2.3. Полоса прокрутки 33
2.3.1. Общие сведения 33
2.3.2. Создание полосы прокрутки 33
2.3.3. Простейшие полосы прокрутки 34
2.3.4. Сообщения от полосы прокрутки 34
2.3.5. Управление полосой прокрутки 35
П 2.4 Редактор текста 36
2.4.1. Создание редактора 36
2.4.2. Сообщения для редактора текста 36
2.4.3. Сообщения от редактора текста 37
П 2.5. Списки строк 38
2.5.1. Создание списка 38
2.5.2. Сообщения от списка 38
2.5.3. Сообщения для списка 38
П. 2.6. Комбинированный список 40
2.6.1. Создание комбинированного списка 40
2.6.2. Коды извещения 40
2.6.3. Сообщения для комбинированного списка 40
П 3. Вывод в окно 41
П. 3.1. Виды контекста отображения 42
П 3.2. Сообщение WM_PAINT 44
П 3.3. Установка атрибутов контекста отображения для текста 45
П 3.4. Вывод текста 46
3.4.1. Настройка параметров шрифта 46
3.4.2. Выбор шрифта в контекст отображения 48
3.4.3. Функции вывода текста 49
3.4.4. Определение метрик шрифта 50
П 3.5. Рисование геометрических фигур 51
3.5.1 Установка атрибутов контекста отображения для рисования. 51
3.5.1. Функции рисования точки 55
3.5.2. Функции рисования линий 56
3.5.3. Функции рисования замкнутых фигур 57
3.5.4 Функции создания и рисования регионов 58
П. 4 Ресурсы приложения и их использование. 66
П. 4.1 Файл ресурсов. 66
П 4.2 Главное меню 74
П. 4.2.1 Элементы меню 74
П. 4.2.2 Создание меню 76
П. 4.2.3 Сообщения от меню 78
П. 4.3. Плавающее меню 79
П. 4.4. Акселераторы 80
П. 4.5. Панель инструментов 82
4.5.1. Создание панели инструментов 82
4.5.2. Управление состоянием кнопок панели 84
4.5.3. Вывод подсказок в панели инструментов 85
П. 4.6. Строка состояния 87
4.6.1. Создание строки состояния 87
4.6.2. Сообщения о меню в строке состояний 89
П 5. Диалоговые панели 91
П. 5.1. Характеристики диалоговых панелей 91
5.1.1. Единицы диалоговой панели ' 91
5.1.2. Стили диалоговой панели 92
5.1.3. Функция окна диалоговой панели 93
П. 5.2. Создание диалоговой панели 94
5.2.1 Создание окна модальной диалоговой панели 94
5.2.2 Создание окна немодальной диалоговой панели 95
П. 5.3 Разработка и компоновка диалоговых панелей. 97
П. 5.4 Сообщения и диалоговые панели 102
П. 5.5. Стандартные диалоговые панели 104
5.5.1. Панели для открытия или сохранения файлов 104
5.5.2. Панель для выбора цветов 106
5.5.3. Панель для выбора шрифта 110