Обработка сообщений от мыши

Мышь- это графическое устройство ввода информации с одной или более кнопками.

Сообщения мыши связанные с рабочей областью окна.

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

Если мышь перемещается по рабочей области окна, оконная процедура получает сообщение WM_MOUSEMOVE.

Если кнопка мыши нажимается или отпускается внутри рабочей области окна, оконная процедура получает следующие сообщения:

Кнопка Нажатие Отпускание Нажатие(Второй щелчок)

Левая WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK

Средняя WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK

Правая WM_RBUTTONDOWN WM_RBUTTONUP WM_RBUTTONDBLCLK

Для всех этих сообщений значение параметра lParam содержит положение мыши. Младшее слово — это координата х, а старшее слово — координата y относительно верхнего левого угла рабочей области окна. Можно извлечь координаты х и y из параметра lParam с помощью макросов LOWORD и HIWORD, определенных

в заголовочных файлах Windows. Значение параметра wParam показывает состояние кнопок мыши и клавиш <Shift> и <Ctrl>. Можно проверить параметр wParam с помощью битовых масок, определенных в заголовочных файлах. Префикс MK означает "клавиша мыши" (mouse key).

MK_LBUTTON Левая кнопка нажата

MK_MBUTTON Средняя кнопка нажата

MK_RBUTTON Правая кнопка нажата

MK_SHIFT Клавиша <Shift> нажата

MK_CONTROL Клавиша <Ctrl> нажата

При движении мыши по рабочей области окна, Windows не вырабатывает сообщение WM_MOUSEMOVE для всех возможных положений мыши. Количество сообщений WM_MOUSEMOVE, которые получает программа, зависит от устройства мыши и от скорости, с которой оконная процедура может обрабатывать сообщения о движении мыши.

При щелчке левой кнопкой мыши в рабочей области неактивного окна, Windows сделает активным окно, в котором произвели щелчок, и затем передаст оконной процедуре сообщение WM_LBUTTONDOWN. Если оконная процедура получает сообщение WM_LBUTTONDOWN, то программа может уверенно считать, что ее окно активно.

Есть два исключения:

• Оконная процедура может "захватить мышь" (capture the mouse) и продолжать получать сообщения мыши, даже если она находится вне рабочей области окна.

• Если системное модальное окно сообщений или системное модальное окно диалога находится на экране, никакая другая программа не может получать сообщения мыши. Системные модальные окна сообщений и диалога запрещают переключение на другое окно программы, пока оно активно.

Сообщения мыши нерабочей области.

Если мышь оказывается вне рабочей области окна, но все еще внутри окна, Windows посылает оконной процедуре сообщения мыши "нерабочей области". Нерабочая область включает в себя панель заголовка, меню и полосы прокрутки окна.

Нет необходимости обрабатывать сообщения мыши нерабочей области. Вместо этого их просто передают в DefWindowProc, чтобы Windows могла выполнить системные функции.

Сообщения мыши нерабочей области почти полностью такие же как и сообщения мыши рабочей области. В названия сообщений входят буквы "NC", что означает "нерабочая" (nonclient). Если мышь перемещается внутри нерабочей области окна, то оконная процедура получает сообщение WM_NCMOUSEMOVE. Кнопки мыши вырабатывают

следующие сообщения:

Кнопка Нажатие Отпускание Нажатие (Второй щелчок)

Левая WM_NCLBUTTONDOWN WM_NCLBUTTONUP WM_NCLBUTTONDBLCLK

Средняя WM_NCMBUTTONDOWN WM_NCMBUTTONUP WM_NCMBUTTONDBLCLK

Правая WM_NCRBUTTONDOWN WM_NCRBUTTONUP WM_NCRBUTTONDBLCLK

Параметр wParam показывает зону нерабочей области, в которой произошло перемещение или щелчок мыши. Его значение приравнивается одному из идентификаторов, начинающихся с HT, что означает "тест попадания" (hit-test), которые определяются в заголовочных файлах Windows.

Переменная lParam содержит в младшем слове значение координаты х, а в старшем — y. Однако, эти координаты являются координатами экрана, а не координатами рабочей области, как это было у сообщений мыши рабочей области. Значения координат x и y верхнего левого угла экрана равны 0. Если вы движетесь вправо, то увеличивается значение координаты х, если вниз, то значение координаты у.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



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