- •Часть 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. Панель для выбора шрифта
П. 4.2.3 Сообщения от меню
Меню посылает сообщения в функцию того окна, к которому оно подключено функцией SetMenu.
Сообщение WM_INITMENU
Сообщение WM_INITMENU поступает перед отображением главного меню. Параметр wParam равен дескриптору меню. Если сообщение WM_INITMENU обрабатывают, то возвращают 0. Обработка обычно сводится к изменению состояния элементов меню.
Сообщение WM_INITMENUPOPUP
Это сообщение поступает перед отображением временного меню.
Параметр wParam равен дескриптору меню. Младшее слово параметра lParam равно позиции этого меню в меню верхнего уровня, старшее слово lParam равно 1 для системного меню и 0 - для обычного. Если это сообщение обрабатывают, то возвращают 0. Обработка обычно сводится к изменению состояния элементов меню.
Сообщение WM_COMMAND
Это сообщение поступает после выбора строки меню. Младшее слово параметра wParam равно идентификатору выбранной команды, а старшее слово равно 0. После обработки сообщения возвращают 0. ,
Сообщение WM_MENUSELECT
Сообщение WM_MENUSELECT поступает в процессе перемещения курсора меню по строкам меню. Младшее слово параметра wParam равно идентификатору команды или позиции строки (если при выборе строки отображается временное меню), а старшее слово содержит флажки состояния элементов меню из следующей таблицы:
Значение |
Состояние элемента |
MF CHECKED |
Отмечен |
MF_DISABLED |
Заблокирован |
MF GRAYED |
Недоступен |
MF HILITE |
Высвечен |
MF MOUSESELECT |
Выбран мышью |
MF POPUP |
Открывает временное меню |
MF_SYSMENU |
Принадлежит системному меню окна. Параметр lParam содержит дескриптор этого меню |
Если старшее слово wParam содержит 0xFFFF и IParam=NULL, то Windows закрыл меню. Параметр lParam содержит дескриптор меню, по которому перемещается курсор.
Если это сообщение обрабатывают, то возвращают 0.
П. 4.3. Плавающее меню
Плавающее меню создают обычным способом, но не вставляют в другое меню. Для отображения и выбора строк этого меню вызывают функцию TrackPopupMenu:
BOOL TrackPopupMenu( HMENU hMenu, UINT uFlags, intx, int у, int nReserved,
HWND hwnd, CONST RECT *prcRect);
Эта функция выводит на экран плавающее меню и создает свой собственный цикл обработки сообщений, завершающий работу после выбора строки. Она не возвращает управление до тех пор, пока работа с меню не будет завершена выбором строки или отказом от выбора.
Параметры:
1. hMenu - дескриптор отображаемого плавающего меню. Он может быть создан функцией CreatePopupMenu или получен с помощью функции GetSubMenu.
2. uFlags - комбинация флажков, которые задают функциональные параметры плавающего меню.
2.1. Следующие константы задают способ размещения меню по горизонтали относительно параметра x:
Константа |
Пояснение |
ТРМ CENTERALIGN |
Центр меню по горизонтали совпадает с х |
ТРМ LEFTALIGN |
Левый край меню совпадает с х |
ТРМ RIGHTALIGN |
Правый край меню совпадает с х |
2.2. Следующие константы задают способ размещения меню по вертикали относительно параметра у:
Константа |
Пояснение |
TPM_BOTTOMALIGN |
Нижний край меню совпадает с у |
TPM_TOPALIGN |
Верхний край меню совпадает с у |
ТРМ _VCENTERALIGN |
Центр меню по вертикали совпадает с у |
2.3. Следующие константы задают способ выбора строк меню без указания окна-владельца для меню:
Константа |
Пояснение |
ТРМ NONOTIFY |
Не посылать сообщения о выборе строки |
TPM_RETURNCMD |
Возвращать идентификатор выбранной команды |
2.4. Следующие константы задают кнопку мыши, которую прослеживает плавающее меню:
Константа |
Пояснение |
TPM_LEFTBUTTON |
Прослеживает левую кнопку мыши |
TPM_RIGHTBUTTON |
Прослеживает правую кнопку мыши |
3. x - координата по горизонтали от левого края экрана.
4. у - координата по вертикали от верхнего края экрана.
5. nReserved - зарезервированный параметр, должен быть всегда равен нулю.
6. hwnd - дескриптор уже существующего окна-владельца, которое получит сообщения от меню. Сообщение WM_COMMAND окнололу-чит только после завершения работы функции TrackPopupMenu.
7. prcRect - указатель на прямоугольную область, находясь в пределах которой можно работать с меню. Если сделать щелчок мышью за пределами этого прямоугольника, плавающее меню исчезнет. Если prcRect=NULL, то эта область ограничена прямоугольной рамкой плавающего меню.
В случае успешного выполнения функция возвращает ненулевое значение. Если в параметре uFlags задано TPM_RETURNCMD, то возвращаемое значение равно идентификатору команды выбранной строки. Если элемент невыбран, возвращаемое значение - нуль.