На входе: AX = 000Bh.
На выходе: CX = перемещение по горизонтали с момента последнего вызова функции;
DX = перемещение по вертикали с момента последнего вызова функции.
Функция позволяет определить относительное перемещение мыши с момента последнего вызова этой функции. Результат возвращается в указанных выше регистрах. Для измерения перемещения используется единица mickey - "мики". Один мик соответствует 0.005 дюйма (т.е. 1/200 дюйма).
Отрицательные значения перемещения означают, соответственно, движение влево и вверх, положительные - вправо и вниз.
Для преобразования миков в пиксели (точки экрана) можно использовать функцию 1Bh, которая будет описана немного позже.
Функция для определения относительного перемещения:
/** *.Name ms_querm *.Title Определение показания счетчика перемещений * *.Descr Эта функция определяет относительное перемещение * мыши с момента последнего вызова функции. * * Определенное состояние записывается в структуру * MOUSE_STATE, описанную в файле sysp.h: * * typedef struct _MOUSE_STATE_ { * unsigned bottoms; * unsigned x; * unsigned y; * } MOUSE_STATE; * * Адрес структуры передается функции в качестве * параметра. Перемещение определяется в миках * - 1/200 долях дюйма. * *.Proto MOUSE_STATE *ms_querm(MOUSE_STATE *state); * *.Params MOUSE_STATE *state - указатель на структуру, * описывающую состояние мыши. * *.Return Функция возвращает значение своего параметра. * *.Sample ms_samp7.c **/
#include <stdio.h> #include <dos.h> #include <conio.h> #include "sysp.h"
union REGS reg;
MOUSE_STATE *ms_querm(MOUSE_STATE *state) {
reg.x.ax = 0xB; int86(0x33,®,®);
state->bottoms = 0; state->x = reg.x.cx; state->y = reg.x.dx;
return(state); }
Для иллюстрации приведем программу, постоянно вызывающую эту функцию и отображающую на экране величину относительного перемещения мыши:
#include <dos.h> #include <stdio.h> #include <conio.h> #include "sysp.h"
union REGS reg; void main() {