我有一个WPF窗口,可以在多台不同分辨率的显示器上运行。当我将窗口从高分辨率显示器移动到低分辨率显示器或反之亦然时,这将是很好的,但不需要足够智能来更改最大高度。
当前的需求非常简单,可以根据当前监视器的高度设置模式窗口的最大高度。
我已经测试了一些东西,比如
Screen.PrimaryScreen.WorkingArea.Height
Screen.PrimaryScreen.WorkingArea.Width但它只给出了系统主屏幕的高度,而我需要的是窗口当前所在屏幕的高度。
在多个显示器中的一个主要问题是窗口的顶级属性,在高分辨率显示器中这是可以的,但在低分辨率或辅助显示器中,它从一个不同的数字开始,如160。
发布于 2019-08-24 07:30:53
您可以使用Win32 API MonitorFromWindow或Forms API Screen.FromHandle来确定窗口当前所在的监视器区域。
在下面的两个示例中,我将最大高度设置为窗口当前所在的监视器/屏幕的工作区高度的50%。下面的两个示例是在System.Windows.Window子类的方法中(所以这里指的是Window)。
full example source code is here。
Win32
var window = new System.Windows.Interop.WindowInteropHelper(this);
IntPtr hWnd = window.Handle;
var screen = System.Windows.Forms.Screen.FromHandle(hWnd);
MaxHeight = 0.5 * screen.WorkingArea.Height;表单
var window = new System.Windows.Interop.WindowInteropHelper(this);
IntPtr hWnd = window.Handle;
IntPtr hMonitor = Win32.MonitorFromWindow(hWnd, Win32.MONITOR_DEFAULTTONEAREST);
var monitorInfo = new Win32.MONITORINFOEX();
monitorInfo.cbSize = (int)Marshal.SizeOf(monitorInfo);
if (Win32.GetMonitorInfo(hMonitor, ref monitorInfo))
{
MaxHeight = (monitorInfo.rcWork.Bottom - monitorInfo.rcWork.Top) * 0.5;
}请注意,Win32.MonitorFromWindow是win32的MonitorFromWindow函数的pinvoke。
发布于 2019-08-26 02:37:42
我认为我的测试程序中的helper类将为支持和不支持DPI的程序提供所需的值:Screen Parameters。
这使用了几个Win32应用程序接口调用来获取各种屏幕参数。它还提供了屏幕比例因子,允许您根据窗口当前所在的屏幕调整窗口大小。
https://stackoverflow.com/questions/57476595
复制相似问题