Я работаю над адаптацией приложения к пользовательским значениям DPI (масштабирование Windows).Фактическое разрешение вторичного экрана для пользовательского DPI
Если я правильно понял, масштабирование заставляет приложения думать, что разрешение меньше, чем на самом деле. Например, имея шкалу 125%, если у вас есть разрешение 1920x1080, фактический размер максимального окна будет 1536x864. И точно, это может вызвать некоторые проблемы, если вы управляете некоторыми размерами и позициями из кода.
В настоящем время, я использую следующие значения для определения местоположения и т.д.:
SystemParameters.FullPrimaryScreenWidth
иSystemParameters.FullPrimaryScreenHeight
как "виртуального" (масштабируемого) разрешение;Screen.PrimaryScreen.WorkingArea.Width
иScreen.PrimaryScreen.WorkingArea.Height
для оригинального разрешения;
Из этих значений легко получить значение масштабирования, которое можно использовать при любом позиционировании и калибровке.
Но все эти значения предназначены для основного экрана. Что делать, если мне понадобится сделать позиционирование и размер для дополнительного экрана, который может иметь разное фактическое (и, следовательно, другое «виртуальное») разрешение?
На данный момент я получаю экран как этот
var screen = Screen.FromHandle(new System.Windows.Interop.WindowInteropHelper(Application.Current.MainWindow).Handle);
, который позволяет мне получить фактическое разрешение, используя WorkingArea
прямоугольник. Но как насчет «виртуального» разрешения? Есть ли аналог SystemParameters.FullPrimaryScreenWidth
и т. Д. Любого экрана в стороне от первичного?
PS. Я знаю, что масштаб распределен, поэтому, получив его значение для основного экрана, я могу использовать его для любого другого экрана, но я бы хотел знать ответ, если есть прямая переменная, чтобы получить эти значения.
Это никогда не происходит в приложении WPF, оно всегда отключает виртуализацию DPI по умолчанию. Конечно, ошибка, которую вы делаете, заключается в том, что вы забыли преобразовать значения, которые вы получаете из класса Screen, от пикселей до дюймов. [Посмотрите здесь] (http://stackoverflow.com/questions/30424985/how-to-convert-a-wpf-inch-unit-to-winforms-pixels-and-vice-versa). –
@ HansPassant в любом случае, главный вопрос - как получить «виртуальное» разрешение. – lentinant