События мыши
Мы уже имели возможность убедиться в получении событий мыши с помощью индикатора EventAll.mq5 из раздела Связанные с событиями свойства графика. Событие CHARTEVENT_CLICK передается в MQL-программу по каждому нажатию кнопки мыши в окне, а события перемещения курсора CHARTEVENT_MOUSE_MOVE и прокрутки колесика CHARTEVENT_MOUSE_WHEEL требуют предварительного включения в настройках графика, для чего служат, соответственно, свойства CHART_EVENT_MOUSE_MOVE и CHART_EVENT_MOUSE_WHEEL (оба по умолчанию отключены).
Если под мышью находится графический объект, при нажатии кнопки генерируется не только событие CHARTEVENT_CLICK, но и CHARTEVENT_OBJECT_CLICK.
Для событий CHARTEVENT_CLICK и CHARTEVENT_MOUSE_MOVE параметры обработчика OnChartEvent содержат следующую информацию:
- lparam — координата X
- dparam — координата Y
Кроме того, для события CHARTEVENT_MOUSE_MOVE параметр sparam содержит строковое представление битовой маски, описывающей статус кнопок мыши и управляющих клавиш (Ctrl, Shift). Установка в 1 конкретного бита означает нажатие соответствующей кнопки или клавиши.
Биты |
Описание |
---|---|
0 |
Состояние левой кнопки мыши |
1 |
Состояние правой кнопки мыши |
2 |
Состояние клавиши SHIFT |
3 |
Состояние клавиши CTRL |
4 |
Состояние средней кнопки мыши |
5 |
Состояние первой дополнительной кнопки мыши |
6 |
Состояние второй дополнительной кнопки мыши |
Например, если установлен 0-й бит, получим число 1 (1 << 0), а если установлен 4-й бит, это даст число 16 (1 << 4). Одновременное нажатие кнопок или клавиш обозначается суперпозицией битов.
Для события CHARTEVENT_MOUSE_WHEEL координаты X и Y, а также флаги состояния кнопок мыши и управляющих клавиш особым образом кодируются внутри параметра lparam, а параметр dparam сообщает направление (плюс/минус) и величину прокрутки колесиком (кратную ±120).
8-байтовое целое число lparam совмещает в себе несколько упомянутых информационных полей.
Байты |
Описание |
---|---|
0 |
Значение типа short с координатой X |
1 |
|
2 |
Значение типа short с координатой Y |
3 |
|
4 |
Битовая маска состояния кнопок и клавиш |
5 |
Не используется |
6 |
|
7 |
Вне зависимости от типа события координаты мыши передаются относительно всего окна, включая подокна, поэтому при необходимости их следует пересчитывать для конкретного подокна.
Для лучшего понимания CHARTEVENT_MOUSE_WHEEL воспользуйтесь индикатором EventMouseWheel.mq5. Он получает и раскодирует сообщения, выводя затем их описание в журнал.
#define KEY_FLAG_NUMBER 7
|
Запустите индикатор на графике и прокручивайте колёсико мыши, нажимая поочередно различные кнопки и клавиши. Вот пример результата:
X=186 Y=303 D=-120
|