【发布时间】:2016-07-12 13:24:38
【问题描述】:
我正在努力使应用程序适应自定义 DPI 值(Windows 缩放)。
如果我理解正确的话,缩放会使应用程序认为分辨率比实际要小。例如,具有 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 类中获得的值从像素转换为英寸。 Look here.
-
@HansPassant 无论如何,主要问题是如何获得“虚拟”分辨率。