Такая задача:
нужно ограничить движение мышки по какой нибудь кривой. Для простоты - прямоугольная область. То есть мышка должна двигаться только по его периметру.
Насколько я понимаю, необходимо установить свой обработчик функцией 18h прерывания 33h, только не совсем понимаю, что в этом обработчике писать... Может подскажите, как это сделать?
Ограничение движения мышки
Модератор: Andy
- Romeo
- Сообщения: 3126
- Зарегистрирован: 02 мар 2004, 17:25
- Откуда: Крым, Севастополь
- Контактная информация:
Думаю, свой обрабочик писать не обязательно. Можно просто анализировать сдвиг мышки и тут же устанавливать её требуемую позицию. Это будет происходить настолько быстро, что для конечного пользователя создастся иллюзия движения мышки только по множеству точек данной кривой.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Для ограничения перемещения внутри прямоугольной области можно воспользоваться фнунк. ax = 7 и ax = 8 int 33h.Для простоты - прямоугольная область.
Код: Выделить всё
ax = 7 (по горизонтали)
= 8 (по вертикали)
cx - минимальная позиция
dx - максимальная позиция
Код: Выделить всё
ax = 0ch
cx - условия вызова твоего обработчика
es:dx - собственно обработчик
В обработчик приходит инфа о состоянии кнопок на текущий момент и координатах мыши. Дальше анализируй их на предмет принадлежания заданной кривой и устанавливай на свои (функ. 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" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Спасибо всем за хорошие советы, но немного поздно 
Действительно, было необходимо ограничить движение мышки границей прямоугольника.
Написал я это через день после поста. Обработчик свой мне установить не удалось почему то, но не слишком и хотелось )). Просто анализировал координаты курсора в цикле.

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