Страница 1 из 1

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

Добавлено: 04 май 2004, 14:56
mm
Такая задача:
нужно ограничить движение мышки по какой нибудь кривой. Для простоты - прямоугольная область. То есть мышка должна двигаться только по его периметру.
Насколько я понимаю, необходимо установить свой обработчик функцией 18h прерывания 33h, только не совсем понимаю, что в этом обработчике писать... Может подскажите, как это сделать?

Добавлено: 07 май 2004, 16:20
Romeo
Думаю, свой обрабочик писать не обязательно. Можно просто анализировать сдвиг мышки и тут же устанавливать её требуемую позицию. Это будет происходить настолько быстро, что для конечного пользователя создастся иллюзия движения мышки только по множеству точек данной кривой.

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

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

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

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

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

ax = 0ch
cx - условия вызова твоего обработчика
es:dx - собственно обработчик
Процедура-обработчик вызывается когда происходит условие-вызов, которое ты задал в cx (для данного случая cx должен быть равен 1, то есть перехватывать перемещение мыши).
В обработчик приходит инфа о состоянии кнопок на текущий момент и координатах мыши. Дальше анализируй их на предмет принадлежания заданной кривой и устанавливай на свои (функ. ax = 4), если надо.

Добавлено: 07 май 2004, 19:13
Romeo
Человек ошибся, написав слово область. Насколько я понял постановку, имеется ввиду граница прямоугольника. Если бы нужно было просто ограничить область перемещения мыши прямоугольной областью, то для этого есть 7-я и 8-я функции 33h прерывания, как было справедливо отмечено ранее...

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