Assembler - язык неограниченных возможностей


Работа с мышью - часть 2


В большинстве случаев эта функция не используется в программах, так как для того, чтобы реагировать на нажатие кнопки или перемещение мыши в заданную область, требуется вызывать это прерывание постоянно, что приводит к трате процессорного времени. Функции 5 (определить положение курсора при последнем нажатии кнопки), 6 (определить положение курсора при последнем отпускании кнопки) и 0Bh (определить расстояние, пройденное мышью) могут помочь оптимизировать работу программы, самостоятельно следящей за всеми передвижениями мыши, но гораздо эффективнее указать драйверу самому следить за ее передвижениями (чем он, собственно, и занимается постоянно) и передавать управление в программу, как только выполнится заранее определенное условие, например пользователь нажмет на левую кнопку мыши. Такой сервис обеспечивает функция 0Ch — установить обработчик событий.


INT 33h, AX = 0Ch — Установить обработчик событий

Ввод: AX = 000Ch
ES:DX = адрес обработчика
СХ = условие вызова

    бит 0 — любое перемещение мыши

    бит 1 — нажатие левой кнопки

    бит 2 — отпускание левой кнопки

    бит 3 — нажатие правой кнопки

    бит 4 — отпускание правой кнопки

    бит 5 — нажатие средней кнопки

    бит 6 — отпускание средней кнопки

СХ = 0000h — отменить обработчик


Обработчик событий должен быть оформлен, как дальняя процедура (то есть завершаться командой RETF). На входе в процедуру обработчика АХ содержит условие вызова, ВХ — состояние кнопок, СХ, DX — X- и Y-координаты курсора, SI, DI — счетчики последнего перемещения по горизонтали и вертикали (единицы измерения для этих счетчиков — мики, 1/200 дюйма), DS — сегмент данных драйвера мыши. Перед завершением программы установленный обработчик событий должен быть обязательно удален (вызов функции 0Ch с СХ = 0), так как иначе при первом же выполнении условия управление будет передано по адресу в памяти, с которого начинался обработчик.




Начало  Назад  Вперед