double arrow

Сообщения мыши

2

В отличие от клавиатуры, сообщения от мыши приходят в окно в любом случае, если мышь находится над окном (даже, если окно не активно и не имеет фокуса ввода) и совершается какое-либо действие с мышью (перемещение мыши или нажатие клавиш). В следующей таблице приведены основные сообщения от мыши, которые могут быть обработаны оконной процедурой:

Сообщение Назначение Значение параметра lParam Значение параметра wParam
WM_MOUSEMOVE Мышка перемещается над окном Координаты мыши в координатах клиентской области окна:   x= LOWORD(lParam) y= HIWORD(lParam)   Битовая маска, определяющая состояние управляющих клавиш и других кнопок мыши: MK_LBUTTОN левая кнопка нажата MK_RBUTTОN правая кнопка нажата MK_МBUTTUN средняя кнопка нажата MK_SHIFT <Shift> нажат MK_CONTROL <Ctrl> нажат
WM_LBUTTONDOWN Левая клавиша нажата
WM_MBUTTONDOWN Средняя клавиша нажата
WM_RBUTTONDOWN Правая клавиша нажата
WM_LBUTTONUP Левая клавиша отпущена
WM_MBUTTONUP Средняя клавиша отпущена
WM_RBUTTONUP Правая клавиша отпущена
WM_LBUTTONDBLCLK Левая клавиша дважды нажата
WM_MBUTTONDBLCLK Средняя клавиша дважды нажата
WM_RBUTTONDBLCLK Правая клавиша дважды нажата

Следует заметить, что окно состоит из двух частей – клиентской области (куда непосредственно осуществляется графический вывод оконной процедуры) и не клиентской области, которую занимает все оставшееся пространство окна (рамка, строка заголовка, меню). Сообщение от мыши приходит в оконную процедуру при попадании в любую область окна – клиентскую и не клиентскую. Тип сообщений в обоих случаях разный. Каждому сообщению в таблице, приведенной выше, соответствует сообщение не клиентской области имеющее префикс NC (nonclient). Например, WM_NCLBUTTONDOWN, WM_NCLBUTTONUP. Значения остальных параметров для не клиентской области отличаются: wParam показывает зону нерабочей области, в которой произошло перемещение или щелчок мыши (что можно определить при помощи идентификаторов, начинающихся с HT(hit-test) и определенных в заголовочных файлах Windows); параметр lParam содержит координаты мыши относительно экрана.

Существуют две функции, позволяющие перевести оконные координаты в координаты экрана и наоборот:

ScreenToClient(hwnd, pPoint); // преобразует экранные координаты в оконные

ClientToScreen(hwnd, pPoint); // преобразует оконные координаты в экранные

В функции передаются координаты через структуру POINT. Функции преобразуют координаты и записывают новые их значения на место старых.

2

Сейчас читают про: