Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Системное программное обеспечение. Учебное пособие. Лейкин М.А., Солдатов Е.А.doc
Скачиваний:
23
Добавлен:
30.04.2022
Размер:
1.29 Mб
Скачать

5.2.4.Чтение позиции курсора и состояния кнопок "мыши"

AX = 0003Н - определение координат курсора и состояния кнопок. Возвращает в BL:

Бит, установленный в единицу

0 - нажата левая кнопка;

1 - нажата правая кнопка;

2 - нажата средняя кнопка.

СХ - горизонтальная координата, DX - вертикальная координата.

АХ = 0005Н - определение количества нажатий кнопок.

0006Н - определение количества отпусканий.

BX = 0 - запрос о левой кнопке, 1 и 2 соответственно о правой и средней. Возвращает в BX число нажатий/отпусканий с момента последнего обращения к функции; СХ - горизонтальная координата в момент нажатия; DX - вертикальная координата в момент нажатия.

АХ = 000BН - определение значения счетчика сигналов микки. Возвращает: CX - перемещение по горизонтали в микки с момента последнего вызова функции; DX - по вертикали. Значения имеют тип int. Отрицательные соответствуют движению влево или вниз, положительные - вправо или вверх.

AX = 0004Н: позиционирование курсора из программы. CX - горизонтальная координата; DX - вертикальная координата.

5.2.5.Управление мышью в приложениях Windows

Несмотря на то, что мышь является важным устройством для приложений Windows, ее наличие не является обязательным. Приложение может определить, входит ли мышь в состав аппаратных средств компьютера с помощью функции GetSystemMetrics, передавая ей значение SM_MOUSEPRESENT.

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

В системе хранится переменная, которая управляет скоростью перемещения мыши. Используя функцию SystemParametersInfo с флагами SPI_GETMOUSE или SPI_SETMOUSE, можно получить (или установить) скорость.

Windows поддерживает мышь с тремя кнопками. В сообщениях и именованных константах используются буквы L, M и R, чтобы идентифицировать соответственно левую (главную), среднюю и правую кнопки. Приложение может определить число кнопок мыши, передавая значение SM_CMOUSEBUTTONS функции GetSystemMetrics. Чтобы сконфигурировать мышь для левши, используется функция SwapMouseButton, которая меняет назначение левой и правой кнопок. Иначе это можно сделать, передавая SPI_SETMOUSEBUTTONSWAP функции SystemParametersInfo. Отметим, однако, что мышь является разделяемым ресурсом, и все изменения будут значимы для любых приложений. Мышь генерирует событие всегда при ее перемещении, нажатии и отпускании кнопок. События от мыши конвертируются в сообщения и передаются задаче формирования очереди сообщений. Когда сообщения мыши передаются быстрее, чем они могут быть обработаны задачей, Windows оставляет только самые последние сообщения. Сообщения мыши делятся на две группы: относящиеся к клиентской области окна и не относящиеся. Обычно приложение обрабатывает клиентские сообщения и игнорирует неклиентские. При перемещении мыши в пределах клиентской области система передает сообщение

WM_MOUSEMOVE. При нажатии и отпускании кнопок в пределах клиентской области передаются следующие сообщения:

WM_LBUTTONDBLCLK - двойной щелчок левой кнопкой.

WM_LBUTTONDOWN - нажатие левой кнопки.

WM_LBUTTONUP - отпускание левой кнопки.

WM_MBUTTONDBLCLK - двойной щелчок средней кнопкой.

WM_MBUTTONDOWN - нажатие средней кнопки.

WM_MBUTTONUP - отпускание средней кнопки.

WM_RBUTTONDBLCLK - двойной щелчок правой кнопкой.

WM_RBUTTONDOWN - нажатие правой кнопки.

WM_RBUTTONUP - отпускание правой кнопки.

Параметр lParam сообщения клиентской области показывает позицию горячей точки курсора мыши. Младшее слово относится к координате X, старшее - к координате Y клиентской области. Левый верхний угол клиентской области окна имеет координаты (0,0).

Параметр wParam содержит флаги состояния кнопок мыши, а также клавиш CTRL и SНIFT.