Аппаратное обеспечение IBM PC



         

Определить содержимое счетчиков перемещения


На входе: 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,&reg,&reg);

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() {




Содержание  Назад  Вперед