Почему мой курсор мыши не двигается туда, куда я говорю, чтобы он шел с Cursor.Position? - PullRequest
1 голос
/ 30 июля 2009

Я делаю некоторые манипуляции с курсором мыши относительно областей отсечения, и для этого мне нужно показать «поддельный» курсор на экране. Мой реальный курсор в конечном итоге будет скрыт, и будет лишь слегка отделен от фальшивого курсора пользователя, чтобы дать мне буфер для операций отсечения преформ. Но это не так важно.

Это так странно. Кажется, что программа явно игнорирует мои команды. У меня есть некоторый отладочный код:

Debug.WriteLine("1fake: " + fakeMouse.X + " " + fakeMouse.Y);
Debug.WriteLine("1real: " + this.PointToClient(Cursor.Position).X + " " + this.PointToClient(Cursor.Position).Y);

int fmx = fakeMouse.X;
int fmy = fakeMouse.Y;

Cursor.Position = new Point(fmx, fmy);

Debug.WriteLine("2fake: " + fmx + " " + fmy);
Debug.WriteLine("2real: " + this.PointToClient(Cursor.Position).X + " " + this.PointToClient(Cursor.Position).Y);

И это приводит к выводу отладчика следующим образом:

1fake: 489 497
1real: 490 500
2fake: 489 497
2real: 274 264 // I just set this to be EXACTLY The same as the value above it!?!

Курсор уходит с дороги в совершенно другую часть экрана. Я сделал fmx, fmy, чтобы свести проблему к чисто целочисленным координатам, но она по-прежнему не принимает правильные параметры. Это как-то меняется снова где-то еще? Я не понимаю.

Ответы [ 2 ]

2 голосов
/ 30 июля 2009

Cursor.Position ожидает точку в экранных координатах. Если ваша точка находится в координатах окна или клиента, она будет смещена относительно ожидаемого вами значения.

Возможно, вам просто нужно позвонить PointToScreen. Что-то вроде:

Cursor.Position = this.PointToScreen(new Point(fakeMouse.X, fakeMouse.Y));

http://msdn.microsoft.com/en-us/library/ms229598.aspx

1 голос
/ 30 июля 2009

Это потому, что вы используете PointToClient перед записью вывода. Положение курсора относительно экрана, а не вашей формы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...