2015-09-16 3 views
3

Мы можем получить разрешение и прочее для нашего экрана Screen класс. Итак, мы должны использовать Screen.WorkingArea.Width и Screen.WorkingArea.Height, если хотим разместить что-то в центре экрана.Получить масштаб экрана

Но, в Windows 8.1 (не уверен относительно других ОС) существует возможность масштабирования элементов на экране, если они кажутся слишком маленькими. Вы можете проверить это, вызывая контекстное меню на рабочем столе, выберите «Разрешение экрана», а затем выберите «Сделать текст и другие предметы больше или меньше».

И проблема в том, что, похоже, на самом деле это увеличивает разрешение экрана! Таким образом, Screen.WorkingArea.Width и Screen.WorkingArea.Height придадут вам масштабированное значение, а точка Screen.WorkingArea.Width/2Screen.WorkingArea.Height/2 больше не будет находиться в центре фактического экрана (для 200% масштабирования эта точка будет в правом нижнем углу экрана). Это может привести к большому размещению элементов пользовательского интерфейса.

Итак, можно ли получить значение масштабирования? Я не могу найти класс, содержащий эту информацию.

+0

[ли это поможет?] (Https://msdn.microsoft.com/en-US/library/windows/apps/windows.graphics .display.displayproperties.resolutionscale.aspx) – kevintjuh93

+0

Кажется, это правильно, но теперь мне нужно выяснить, как использовать его с моим кодом. Я нашел [эту статью] (http://www.codeproject.com/Articles/1285/Calling-API-functions-using-C) об использовании методов API, но я не знаю, где именно это свойство. – lentinant

+0

Какое приложение это приложение? – kevintjuh93

ответ

2

Большинство способов получения DPI зависит от существующих элементов управления, которые иногда могут быть неудобными. Но DPI можно всегда извлекать из реестра. В C#:

using Microsoft.Win32; 
//... 
var currentDPI = (int)Registry.GetValue("HKEY_CURRENT_USER\\Control Panel\\Desktop", "LogPixels", 96); 

Масштаб будет

var scale = 96/(float)currentDPI;