Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Bios INT 33h
Функция 00h - инициализировать драйвер мыши Вход: AX: 0000h Выход: AX: FFFFh в случае успеха, 0000h при неудаче ВХ - количество кнопок мыши Функция 01h - включить курсор мыши Вход: AX: 0001h Выход: Ничего Функция 02h - выключить курсор мыши Вход: AX: 0002h Выход: Ничего Функция 03h - возвратить позицию курсора и статус клавиш Вход: АХ: 000Зh Выход: ВХ - статус кнопок Бит 0 - левая кнопка: 1 - нажата, 0 - не нажата Бит 1 - правая кнопка: 1 - нажата, 0 - не нажата Бит 2 - центральная кнопка: 1 - нажата, 0 - не нажата СХ - Х-координата курсора DX - Y-координата курсора Функция 0Bh - возвратить относительную позицию мыши Вход: AX: 000Bh Выход: СХ - относительное горизонтальное движение в mickey DX - относительное вертикальное движение в mickey Функция 1Ah - установить чувствительность Вход: AX: 00lAh Выход: ВХ - чувствительность по оси Х (0-100) СХ - чувствительность по оси Y (0-100) DX - значение скорости, при которой чувствительность возрастает в 2 раза (0-100) Как видите, функции драйвера вызываются через прерывание 33h. Мы записываем параметр в регистр АХ.и получаем результат в регистрах АХ, ВХ, СХ и DX. Я написал простую функцию для работы с мышью, она называется Squeeze_Mouse(). Эта функция может выполнять много действий — все зависит от передаваемых параметров. Прототип функции:
int Squeeze_Mouse(int command, int *x, int *y, int *buttons);
Кроме этого, я сделал несколько описаний, чтобы упростить работу с ней: #define MOUSE_INT 0х33 // номер прерывания #define MOUSE_RESET 0х00 // сброс мыши #define MOUSE_SHOW 0х01 // показать мышь #define MOUSE_HIDE 0х02 // погасить мышь #define MOUSE BUTT_POS 0х03 // возвратить координаты //и количество кнопок #define MOUSE_SET_SENSITIVITY 0x1A // установить //чувствительность //в пределах 0-100 #define MOUSE_MOTION_REL 0x0B // установить // относительную // чувствительность Таким образом, если мы хотим получить координаты мыши, то должны написать следующее:
Squeeze Mouse(MOUSE_BUTT_POS, & mouse_x, & mouse_y, & mouse_buttons);
где mouse_x, mouse_y и mouse_buttons - локальные переменные для сохранения результатов.
Теперь обратим внимание на два способа, используемые для передачи координат мыши: § Драйвер мыши может возвращать абсолютные координаты. В этом случае значения Х и Y являются координатами мыши на экране. К примеру, если мышь находится в левом верхнем углу экрана, функция возвращает (0, 0); § Драйвер мыши может возвращать относительные координаты. При этом возвращается разница координат от предыдущей посылки. Например, если мышь подвинулась на 20 микки по оси Х и на 10 по оси Y, то эти значения и будут возвращены. Для чтения в относительном режиме используйте константу MOUSE_MOTION_REL. Еще несколько слов о мыши. Вы можете менять ее чувствительность к передвижению, используя константу MOUSE_SET_SENSITIVITY. Для этого подберите для переменных Х и Y значение от 1 до 100 и вызовите Squeeze_Mouse. Чувствительность мыши определяется как отношение пиксельного перемещения курсора мыши к одному микки. Листинг 3.8 содержит демонстрационную программу, которая показывает использование мыши. Эта программа позволяет рисовать на экране, нажимая на левую кнопку мыши и менять цвет, используя правую кнопку.
|