2013-07-15 2 views
2

Я пытаюсь использовать SetCursorPos для перемещения местоположения курсора, когда он попадает в край экрана (для управления скрабом); стандартная «дорожка до тех пор, пока край не будет удален, переместите курсор в середину экрана».Как заставить Windows забыть старую позицию мыши после SetCursorPos?

Проблема в том, что Windows сбрасывает местоположение курсора туда, где оно было, как только оно получает событие мыши.

Для целей отладки, я сделал тест приложение, используя код по адресу: http://msdn.microsoft.com/en-us/library/windows/desktop/ms648380(v=vs.85).aspx#_win32_Using_the_Keyboard_to_Move_the_Cursor

Это показывает мне такое же поведение: использовать мышь, чтобы оставить курсор в левом верхнем углу окна (справа в меню «Файл») и используйте клавиатуру для перемещения курсора в любом месте. Но как только я коснусь мыши, курсор вернется в левый верхний угол.

Это явно менее полезно для моего контроля, который использует мышь для очистки.

Как я могу заставить Windows принять позицию SetCursorPos как правду?

Спасибо!

+0

Я уверен, что это потому, что драйвер мыши (или некоторые функции, которые используют информацию драйвера мыши) отслеживает, где находится курсор. Поскольку сам драйвер мыши просто говорит: «Мышь перемещала x, y позиции из текущего местоположения», больше ничего не может сделать, кроме как отслеживать текущую позицию. У меня такое чувство, что вы ничего не можете с этим поделать. –

+0

Что вы сделали, чтобы быть правдой, не могли бы вы вставить часть своего кода? – woliveirajr

+0

Просто перейдите по ссылке, чтобы увидеть код, который делает то, что я описываю. – maw

ответ

0

Использование SetCursorPos обычно отлично работает (хотя использовать его в целом считается плохим.) Некоторые устройства, такие как планшет Wacom, отправляют абсолютные позиции. Как только устройство отправит новое местоположение, курсор вернется назад. Вы действительно не можете помочь, если это так.

Однако, правильно ли я предполагаю, что вы это делаете, потому что пытаетесь определить скорость курсора? Если это так, вы, вероятно, должны использовать другой API, который дает вам низкоуровневые значения без необходимости использовать положение курсора вообще. Посмотрите на DirectInput!

Смежные вопросы