2015-10-20 3 views
2

У меня есть небольшой экран 2160 x 1440, поэтому я использую 150% масштабирование на нем в Windows.Функции позиции курсора, возвращающие неправильное значение

Использование Cursor.Position или даже GetCursorPos/GetPhysicalCursorPos я всегда получаю отмасштабированные координаты на моем экране (например, (2160, 1440) становится (1440, 960).

Я уверен, что это недавнее изменение, так как я использовал Cursor.Position раньше на этом экране без проблем.

Как это поведение можно объяснить? Почему как GetCursorPos и GetPhysicalCursorPos возвращают то же значение, когда они должны быть разными на моем экране?

и самое главное, это единственный способ получить t он правильные значения, регулирующие возврат этих функций с помощью DPI?

+0

Вы пытались экспериментировать с функцией PhysicalToLogicalPoint? – sharpener

+0

Просто попробовал это с помощью 'GetDesktopWindow()' в качестве дескриптора. Значения координат не изменились к сожалению. Любые другие предложения? – Royce

ответ

0

Для людей, сталкивающихся с этой проблемой, у меня все еще нет объяснений, почему нет разницы между физическими и логическими координатами при их извлечении с GetPhysicalCursorPos и GetCursorPos. PhysicalToLogicalPoint не работал, поскольку он больше не поддерживается после Windows 8.1.

Однако, чтобы все программы были последовательными, возможно, сделав форму dpiAware в своем приложении. Это по существу делает все логические координаты, устраняя необходимость вычисления этого с использованием dpi. Например, изменение ширины формы во время выполнения изменило ее на другую величину, чем при ее изменении в редакторе (в 1,5 раза больше). Другим примером является использование Graphics.CopyFromScreen, для чего требуется, чтобы координаты, полученные мной * 1.5, работали правильно. После изменения значения dpi, это теперь работает нормально.

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