簡體   English   中英

自定義DPI的輔助屏幕的實際分辨率

[英]Actual resolution of secondary screen for custom DPI

我正在努力使應用程序適應自定義DPI值(Windows縮放)。

如果我理解正確,縮放使應用程序思考,分辨率比實際更小。 例如,如果您具有1920x1080分辨率,則具有125%的比例,最大化窗口的實際大小將為1536x864。 當然,如果你從代碼中控制一些大小和位置,它可能會導致一些問題。

現在,我正在使用下一個定位值等:

  • SystemParameters.FullPrimaryScreenWidthSystemParameters.FullPrimaryScreenHeight為“虛擬”(縮放)分辨率;
  • Screen.PrimaryScreen.WorkingArea.WidthScreen.PrimaryScreen.WorkingArea.Height用於原始分辨率;

從這個值,很容易獲得縮放值,可用於任何定位和大小調整。

但所有這些值實際上都是針對主屏幕的。 如果我需要對輔助屏幕進行定位和調整,如果可能具有不同的實際(因此,不同的“虛擬”)分辨率,該怎么辦?

現在我得到這樣的屏幕

var screen = Screen.FromHandle(new System.Windows.Interop.WindowInteropHelper(Application.Current.MainWindow).Handle);

這允許我使用WorkingArea矩形獲得實際分辨率。 但是“虛擬”解決方案呢? 是否有主要的任何屏幕的SystemParameters.FullPrimaryScreenWidth等模擬?

PS。 我知道,這個比例是共享的,所以通過獲取主屏幕的值,我可以將它用於任何其他屏幕,但我想知道答案,如果有直接變量來獲取這個值,無論如何。

您可以使用以下比率

        // calculates text size in that main window (i.e. 100%, 125%,...)
        var ratio = Math.Max(Screen.PrimaryScreen.WorkingArea.Width / SystemParameters.PrimaryScreenWidth,
                        Screen.PrimaryScreen.WorkingArea.Height / SystemParameters.PrimaryScreenHeight);

例如,如果您想在所有屏幕上顯示最大化窗口,則需要使用以下矩形(代碼來自App.xaml.cs):

        foreach (var screen in Screen.AllScreens)
        {
            var mainViewModel = container.Resolve<IMainWindowModel>();

            var window = new MainWindow(mainViewModel);
            if (screen.Primary)
                Current.MainWindow = window;

            window.Left = screen.WorkingArea.Left / ratio;
            window.Top = screen.WorkingArea.Top / ratio;
            window.Width = screen.WorkingArea.Width / ratio;
            window.Height = screen.WorkingArea.Height / ratio;
            window.Show();
            window.WindowState = WindowState.Maximized;
        }

此外,您可以查看我的帖子https://ireznykov.com/2017/01/13/wpf-windows-on-two-screens/ ,它指的是在所有屏幕上輸出最大化窗口的GitHub示例應用程序。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM