Я рисую так называемую обратимую линию в приложении .NET Framework WinForms, используя такой код:
ControlPaint.DrawReversibleLine(
PointToScreen(new Point(x, y1)),
PointToScreen(new Point(x, y2)),
Color.Black);
Если поддержка высокого разрешения не включен в приложении, и приложение запускается на экране с высоким разрешением, координаты x
, y1
и y2
берутся из событий мыши, как если бы приложение работало на экране с разрешением 96 dpi из-за виртуализации dpi в Windows . Но когда я передаю эти числа в Control. PointToScreen(), она обрабатывает их с учетом реального разрешения экрана. В результате баллы, которые я получаю от PointToScreen
, смещаются в левый верхний угол экрана на экранах 4K.
Есть ли простой способ решить эту проблему? Пожалуйста, примите во внимание современные многомониторные конфигурации, в которых каждый монитор может иметь свое разрешение.
DrawReversibleLine
, вы можете рисовать прямо на экране. И/или самостоятельно обрабатывать MapWindowPoints (функцияPointToScreen()
вызывает) - person Jimi   schedule 04.06.2020