获取屏幕比例
Get scale of screen
我们可以获得屏幕的分辨率和内容是 Screen
class。所以,如果我们想在屏幕中央放置一些东西,我们应该使用 Screen.WorkingArea.Width
和 Screen.WorkingArea.Height
。
但是,在 Windows 8.1(不确定其他操作系统)中,可以缩放屏幕上的项目,如果它们看起来太小的话。您可以通过调用桌面上的上下文菜单 select "Screen Resolution",然后 select "Make text and other items larger or smaller".
来检查它
问题是,它似乎确实增加了屏幕分辨率!所以,Screen.WorkingArea.Width
和 Screen.WorkingArea.Height
会给你缩放值,点 Screen.WorkingArea.Width/2
Screen.WorkingArea.Height/2
将不再位于实际屏幕的中心(对于 200% 缩放,这个点将在较低的位置屏幕右上角)。这可能会搞砸很多 UI 项的放置。
那么,是否有可能获得缩放的价值?我找不到任何包含此信息的 class。
大多数检索 DPI 的方法都依赖于现有的控件,这有时可能会带来不便。但始终可以从注册表中检索 DPI。在 C# 中:
using Microsoft.Win32;
//...
var currentDPI = (int)Registry.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop", "LogPixels", 96);
比例将
var scale = 96/(float)currentDPI;
var currentDPI = (int)Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics", "AppliedDPI", 0);
SetClientSizeCore((int)((float)Width * (float)currentDPI/96.0f), (int)((float)Height * (float)currentDPI/96.0f));
这是在 Windows 10 上获取 DPI 信息的工作方法:
int DPI = Int32.Parse((string)Registry.GetValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager",
"LastLoadedDPI", "96"));
我们可以获得屏幕的分辨率和内容是 Screen
class。所以,如果我们想在屏幕中央放置一些东西,我们应该使用 Screen.WorkingArea.Width
和 Screen.WorkingArea.Height
。
但是,在 Windows 8.1(不确定其他操作系统)中,可以缩放屏幕上的项目,如果它们看起来太小的话。您可以通过调用桌面上的上下文菜单 select "Screen Resolution",然后 select "Make text and other items larger or smaller".
来检查它问题是,它似乎确实增加了屏幕分辨率!所以,Screen.WorkingArea.Width
和 Screen.WorkingArea.Height
会给你缩放值,点 Screen.WorkingArea.Width/2
Screen.WorkingArea.Height/2
将不再位于实际屏幕的中心(对于 200% 缩放,这个点将在较低的位置屏幕右上角)。这可能会搞砸很多 UI 项的放置。
那么,是否有可能获得缩放的价值?我找不到任何包含此信息的 class。
大多数检索 DPI 的方法都依赖于现有的控件,这有时可能会带来不便。但始终可以从注册表中检索 DPI。在 C# 中:
using Microsoft.Win32;
//...
var currentDPI = (int)Registry.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop", "LogPixels", 96);
比例将
var scale = 96/(float)currentDPI;
var currentDPI = (int)Microsoft.Win32.Registry.GetValue("HKEY_CURRENT_USER\Control Panel\Desktop\WindowMetrics", "AppliedDPI", 0);
SetClientSizeCore((int)((float)Width * (float)currentDPI/96.0f), (int)((float)Height * (float)currentDPI/96.0f));
这是在 Windows 10 上获取 DPI 信息的工作方法:
int DPI = Int32.Parse((string)Registry.GetValue(
@"HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\ThemeManager",
"LastLoadedDPI", "96"));