В ОС Windows для каждого потока организуется отдельная очередь. В нее попадают сообщения, адресованные тем окнам, которые созданы в данном потоке. Считывание данных сообщения обычно сопровождается вызовом оконной функции и удалением сообщения из очереди.

Сообщение извлекается из очереди в структуру, формат которой приведен ниже:

typedef struct tagMSG {

HWND hwnd; Дескриптор того окна, которому предназначено сообщение.

UINT message; Код (номер) сообщения. WPARAM wParam; Дополнительная информация

LPARAM IParam; о сообщении (зависит от кода сообщения).

DWORD time; Время в миллисекундах от запуска системы до постановки сообщения в очередь. POINT pt; Структура, состоящая из двух целочисленных полей и содержащая позицию на экране курсора мыши в момент поступления сообщения. } MSG; Как уже указывалось, содержимое полей wParam, 1 Param зависит от типа сообщения. Так, в сообщении, формируемом при нажатии любой кнопки мыши, младшее слово 1 Param содержит координату X, а старшее - координату Y курсора, отмечающего позицию мыши в окне. Семь младших бит поля wParam содержат состояние кнопок мыши и клавиш Shift, Ctrl. Если кнопка или клавиша нажата, соответствующий бит равен единице. Чтобы не запоминать номера разрядов, в winuser.h объявлены следующие константы:

#define MK_LBUTTON 0x0001 #define MK_RBUTTON 0x0002 #define MKJHIFT 0x0004 Idefine MK_C0NTR0L 0x0008 Idefine MK_MBUTT0N 0x0010 Idefine MKJBUTT0N1 0x0020 #define MK_XBUTT0N2 0x0040

Последние две константы используются, если по бокам мыши установлены две дополнительные кнопки.

Для прокрутки текста на мыши кроме кнопок может быть установлено вращающееся колесо. Угол поворота ролика (количество щелчков, умноженное на 120)

Создание простейшего приложения

система заносит в старшее слово wParam, но только при формировании сообщения WMJIOUSEWHEEL

Пример содержания полей сообщения при одновременном нажатии клавиши Ctrl и средней кнопки мыши приведен ниже:

hwnd 0x00000cd8 дескриптор окна: message 0x00000207 код (номер сообщения), соответствующий щелчку средней кнопкой: wParam 0x00000018 взведены два бита: lParam 0x00680079 координаты мыши: time 0х010ес337:


⇐ Предыдущая| |Следующая ⇒