首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据可用屏幕的大小设置wpf窗口的最大高度

根据可用屏幕的大小设置wpf窗口的最大高度
EN

Stack Overflow用户
提问于 2019-08-13 19:15:01
回答 2查看 855关注 0票数 1

我有一个WPF窗口,可以在多台不同分辨率的显示器上运行。当我将窗口从高分辨率显示器移动到低分辨率显示器或反之亦然时,这将是很好的,但不需要足够智能来更改最大高度。

当前的需求非常简单,可以根据当前监视器的高度设置模式窗口的最大高度。

我已经测试了一些东西,比如

代码语言:javascript
复制
Screen.PrimaryScreen.WorkingArea.Height
Screen.PrimaryScreen.WorkingArea.Width

但它只给出了系统主屏幕的高度,而我需要的是窗口当前所在屏幕的高度。

在多个显示器中的一个主要问题是窗口的顶级属性,在高分辨率显示器中这是可以的,但在低分辨率或辅助显示器中,它从一个不同的数字开始,如160。

EN

回答 2

Stack Overflow用户

发布于 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

代码语言:javascript
复制
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;

表单

代码语言:javascript
复制
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。

票数 1
EN

Stack Overflow用户

发布于 2019-08-26 02:37:42

我认为我的测试程序中的helper类将为支持和不支持DPI的程序提供所需的值:Screen Parameters

这使用了几个Win32应用程序接口调用来获取各种屏幕参数。它还提供了屏幕比例因子,允许您根据窗口当前所在的屏幕调整窗口大小。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57476595

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档