Ограничение движения мышки

Низкоуровневое программирование портов, микроконтроллеров и т.д.

Модератор: Andy

Ответить
mm
Сообщения: 34
Зарегистрирован: 19 фев 2004, 10:36
Контактная информация:

Такая задача:
нужно ограничить движение мышки по какой нибудь кривой. Для простоты - прямоугольная область. То есть мышка должна двигаться только по его периметру.
Насколько я понимаю, необходимо установить свой обработчик функцией 18h прерывания 33h, только не совсем понимаю, что в этом обработчике писать... Может подскажите, как это сделать?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Думаю, свой обрабочик писать не обязательно. Можно просто анализировать сдвиг мышки и тут же устанавливать её требуемую позицию. Это будет происходить настолько быстро, что для конечного пользователя создастся иллюзия движения мышки только по множеству точек данной кривой.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Andy
Сообщения: 238
Зарегистрирован: 17 фев 2004, 08:15
Откуда: Минск

Для простоты - прямоугольная область.
Для ограничения перемещения внутри прямоугольной области можно воспользоваться фнунк. ax = 7 и ax = 8 int 33h.

Код: Выделить всё

ax = 7 (по горизонтали)
   = 8 (по вертикали)

cx - минимальная позиция
dx - максимальная позиция
Если нужно отслеживать позицию мыши - то функ. 0Ch.

Код: Выделить всё

ax = 0ch
cx - условия вызова твоего обработчика
es:dx - собственно обработчик
Процедура-обработчик вызывается когда происходит условие-вызов, которое ты задал в cx (для данного случая cx должен быть равен 1, то есть перехватывать перемещение мыши).
В обработчик приходит инфа о состоянии кнопок на текущий момент и координатах мыши. Дальше анализируй их на предмет принадлежания заданной кривой и устанавливай на свои (функ. ax = 4), если надо.
*provided AS IS
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Человек ошибся, написав слово область. Насколько я понял постановку, имеется ввиду граница прямоугольника. Если бы нужно было просто ограничить область перемещения мыши прямоугольной областью, то для этого есть 7-я и 8-я функции 33h прерывания, как было справедливо отмечено ранее...
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
mm
Сообщения: 34
Зарегистрирован: 19 фев 2004, 10:36
Контактная информация:

Спасибо всем за хорошие советы, но немного поздно :)
Действительно, было необходимо ограничить движение мышки границей прямоугольника.
Написал я это через день после поста. Обработчик свой мне установить не удалось почему то, но не слишком и хотелось )). Просто анализировал координаты курсора в цикле.
Ответить