Операционная система Microsoft Windows 3.1 для программиста -том 1


Сообщения, поступающие от мыши


Мышь может порождать много сообщений, всего их 22! Однако большинство из них вы можете благополучно проигнорировать, передав эти сообщения "всеядной" функции DefWindowProc. Сообщения, поступающие от мыши, содержат информацию о текущем расположении курсора, о его расположении в момент, когда вы нажимаете на клавиши мыши, и другую аналогичную информацию.

Куда попадают сообщения от мыши?

Существует два режима, определяющих два способа распределения сообщений от мыши.

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

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

HWND WINAPI SetCapture(HWND hwnd);

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

Функция SetCapture возвращает идентификатор окна, которое захватывало мышь до вызова функции или NULL, если такого окна не было.

Функция ReleaseCapture возвращает нормальный режим обработки сообщений мыши:

void WINAPI ReleaseCapture(void);

Эта функция не имеет параметров и не возвращает никакого значения.

Функция GetCapture позволяет определить идентификатор окна, захватившего мышь:

HWND WINAPI GetCapture(void);

Если ни одно окно не захватывало мышь, эта функция возвратит значение NULL.

В любом случае на получение сообщений от мыши никак не влияет факт приобретения или потери окном фокуса ввода.

Приведем полный список сообщений, поступающих от мыши.

Сообщение Описание
WM_LBUTTONDBLCLK Двойной щелчок левой клавишей мыши во внутренней (client) области окна
WM_LBUTTONDOWN Нажата левая клавиша мыши во внутренней области окна
WM_LBUTTONUP Отпущена левая клавиша мыши во внутренней области окна
WM_MBUTTONDBLCLK Двойной щелчок средней клавишей мыши во внутренней области окна
WM_MBUTTONDOWN Нажата средняя клавиша мыши во внутренней области окна
WM_MBUTTOMUP Отпущена средняя клавиша мыши во внутренней области окна
WM_MOUSEMOVE Перемещение курсора мыши во внутренней области окна
WM_RBUTTONDBLCLK Двойной щелчок правой клавишей мыши во внутренней области окна
WM_RBUTTONDOWN Нажата правая клавиша мыши во внутренней области окна
WM_RBUTTONUP Отпущена правая клавиша мыши во внутренней области окна
WM_NCHITTEST Перемещение мыши в любом месте экрана
WM_MOUSEACTIVE Нажата клавиша мыши над неактивным окном
WM_NCLBUTTONDBLCLK Двойной щелчок левой клавишей мыши во внешней (non-client) области окна
WM_NCLBUTTONDOWN Нажата левая клавиша мыши во внешней области окна
WM_NCLBUTTONUP Отпущена левая клавиша мыши во внешней области окна
WM_NCMBUTTONDBLCLK Двойной щелчок средней клавишей мыши во внешней области окна
WM_NCMBUTTONDOWN Нажата средняя клавиша мыши во внешней области окна
WM_NCMBUTTOMUP Отпущена средняя клавиша мыши во внешней области окна
WM_NCMOUSEMOVE Перемещение курсора мыши во внешней области окна
WM_NCRBUTTONDBLCLK Двойной щелчок правой клавишей мыши во внешней области окна
WM_NCRBUTTONDOWN Нажата правая клавиша мыши во внешней области окна
WM_NCRBUTTONUP Отпущена правая клавиша мыши во внешней области окна
<


Начало  Назад  Вперед



Книжный магазин