
- •Лекция 1. Введение в программирование под Windows
- •Основные общие свойства Windows-платформ.
- •Приложения, потоки и окна
- •Классы окон
- •Типы сообщений
- •Приложения также могут определять собственные сообщения.
- •Вызов функций Windows
- •Оконная функция – функция обратного вызова
- •Синхронные и асинхронные сообщения
- •Разделение аппаратных ресурсов
Типы сообщений
Существует много разновидностей сообщений, представляющих события на разных уровнях. Каждое простое событие, каждое простое действие посылается в виде сообщения окну для обработки.
Приложению приходит множество сообщений, однако приложение не должно заботиться о смысле каждого отдельного сообщения. Вместо обработки всех возможных сообщений приложение имеет свободу выбора; необработанные сообщения передаются в функции обработки сообщений операционной системы по умолчанию.
Приходящее приложению Windows-сообщение состоит из нескольких частей, для его представления используется структура MSG. Приведем описание структуры, применяющейся для представления сообщения, т.е. описывающей тип сообщения:
typedef struct tagMSG
{ HWND hwnd; // окно, которому посылается это сообщение
UINT message; // значение самого сообщение
WPARAM wParam; // для передачи дополнительной информации
LPARAM lParam; // для передачи дополнительной информации
DWORD time; // время, когда произошло событие
POINT pt; // точка, где произошло события (для мыши)
} MSG;
Элемент структуры hwnd однозначно идентифицирует окно, которому посылается это сообщение. Каждое окно в Windows имеет такой идентификатор. Элемент message идентифицирует само сообщение. Этот элемент может иметь сотни различных значений, означающих одно из многих сотен различных сообщений, которые могут получать приложения Windows.
Для идентификаторов сообщений обычно используются символьные представления (WM_PAINT, WM_TIMER), а не числовые значения. Эти символьные значения определены в стандартных файлах заголовков Windows (приложению необходимо включать в свой исходный текст только файл windows.h – он содержит директивы #include для остальных файлов).
Сообщения можно разделить на несколько групп в зависимости от их функций. Самой насыщенной группой сообщений является группа сообщений управления окнами. Символьные идентификаторы для этих сообщений начинаются с WM_. Эта группа настолько велика, что ее уместно еще раз разбить на категории. Эти категории включают:
сообщения DDE (dynamic data exchange),
сообщения буфера обмена (clipboard),
сообщения мыши,
сообщения клавиатуры,
сообщения неклиентской (non-client) области окна,
сообщения MDI (multiple-document interface),
и многие другие типы.
Перечисленные категории несколько неточны, не всегда строго определены; они просто служат для удобства программистов, чтобы можно было представить картину множества событий управления окнами. Множество сообщений WM_ также не фиксировано, оно растет по мере добавления новых возможностей операционной системы.
Другие группы сообщений связаны с определенными типами окон. Существуют сообщения, определенные для полей ввода, кнопок, списков, комбинированных списков, полос прокрутки, элементов просмотра списка деревьев и т.д. Эти сообщения за редким исключением обычно обрабатываются оконной процедурой окна элемента управления и редко представляют интерес для программистов приложений.