- •Часть 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. Панель для выбора шрифта
П. 1.4 Сообщения от окна
Рассмотрим, каким сообщениям соответствуют некототые имена констант. В Windows описаны несколько сот кодов сообщений с префиксом WM_.
Код WM_CREATE поступает от функции CreateWindow (о ней речь пойдет ниже) перед созданием окна. Если после обработки этого сообщения функции CreateWindow возвращается значение -1, то окно не создается.
Код WM_SIZE функция окна получает после изменения размеров окна, a
WM_MOVE - после перемещения левого верхнего угла рабочей области окна. Если при изменении размеров окна изменились координаты левого верхнего угла рабочей области, то функция окна сначала получает код WM_MOVE, а затем - WM_SIZE. После изменения режима отображения окна функция окна получает код WM_SIZE, а затем -WM_MOVE.
Код WM_COMMAND функция окна получает при поступлении команды. Тогда младшее слово параметра wParam содержит код команды. Разработчик свои сообщения часто связывает с командами меню и описывает идентификаторы для этих команд. Например, для идентификатора CM_FILE_EXIT команды меню текст приложения должен содержать макроопределение вида
#define CM_FILE_EXIT 3001
Код WM_DESTROY функции окна посылают перед разрушением окна.
Значение параметра lParam зависит от кода сообщения. При поступлении кода WM_MOVE параметр lParam содержит экранные координаты левого верхнего угла рабочей области. Например:
left=LOWORD(IParam); //Координата левого края рабочей области top=HIWORD(IParam); //Координата верхнего края рабочей области
Для кода WM_SIZE параметр lParam несет информацию о ширине сх и высоте су рабочей области:
cx=LOWORD(IParam); //Ширина рабочей области
cy=HIWORD(IParam); //Высота рабочей области
При поступлении любых сообщений от мыши расстояние курсора мыши от левого края рабочей области равно LOWORD(lParam), а от верхнего края - HIWORD(lParam).
Если хотят, чтобы какие-либо переменные сохраняли свои значения до следующего вызова функции окна, то их описывают с приставкой static. Например, если функция окна многократно использует ширину сх и высоту су рабочей области окна, то их описывают как static.
Вызов функции DefWindowProc означает, что необработанное сообщение возвращают операционной системе.
Если функция окна обрабатывает код сообщения, то настоятельно рекомендуется вернуть определенное системой для этого кода значение.
П. 1.5 Сообщения от мыши
Определить присутствие мыши можно с помощью функции GetSystemMetrics, передав ей в качестве параметра значение SM_MOUSEPRESENT. Если мышь есть, эта функция возвращает ненулевое значение.
Для определения количества кнопок можно использовать вызов GetSystemMetrics с параметром SM_CMOUSEBUTTONS.
Когда пользователь перемещает мышь, Windows перемещает по экрану растровую картинку, которая называется курсор мыши (mouse cursor). Курсор мыши имеет вершину (hot spot) размером в один пиксель, точно указывающий положение мыши на экране.
В драйвере дисплея содержатся несколько предопределенных курсоров мыши, которые могут использоваться в программах. Наиболее типичным курсором является наклонная стрелка, которая называется IDC_ARROW (вершина курсора – острие стрелки). Курсор IDC_WAIT в виде песочных часов обычно используется для индикации того, что программа чем-то занята.
Курсор, устанавливаемый по умолчанию для конкретного окна, задается при определении структуры класс окна:
wndclass.hCursor=LoadCursor(NULL,IDC_ARROW);