C# 是否可以通过PInvoke指定WPF窗口的最大化边界?
我的无边界WPF窗口有问题。具体来说,它最大化了windows任务栏的顶部,也最大化了-7边距,使窗口在每个方向上超出屏幕7个像素 在winforms中,通过设置窗口的MaximizedBounds属性可以很容易地解决这个问题,但是WPF没有这个属性 我试图通过WndProc截取最大化消息并手动设置大小/位置来解决此问题,但这会导致将恢复区域覆盖到最大化大小/位置,从而无法恢复窗口 所以,我想我可以通过PInvoke设置窗口的最大边界 意味着它可以通过Win32 SetWindowPlacement完成。。。它采用一种称为WINDOWPLACEMENT的结构:C# 是否可以通过PInvoke指定WPF窗口的最大化边界?,c#,wpf,pinvoke,C#,Wpf,Pinvoke,我的无边界WPF窗口有问题。具体来说,它最大化了windows任务栏的顶部,也最大化了-7边距,使窗口在每个方向上超出屏幕7个像素 在winforms中,通过设置窗口的MaximizedBounds属性可以很容易地解决这个问题,但是WPF没有这个属性 我试图通过WndProc截取最大化消息并手动设置大小/位置来解决此问题,但这会导致将恢复区域覆盖到最大化大小/位置,从而无法恢复窗口 所以,我想我可以通过PInvoke设置窗口的最大边界 意味着它可以通过Win32 SetWindowPlaceme
[Serializable]
[StructLayout(LayoutKind.Sequential)]
public struct WINDOWPLACEMENT
{
public int length;
public int flags;
public int showCmd;
public POINT minPosition;
public POINT maxPosition;
public RECT normalPosition;
}
我想我只需要设置矩形和一个标志来指定它是用于MaximizedBound属性的,但是我在网上找不到任何这样的例子,而且我找到的标志中没有一个可以实现这一点。我找错树了吗?如果是这样的话,有没有其他方法来指定我忽略的最大化界限(或类似的界限)?在进入p/Invoke路径之前,我会尝试类似的方法-我知道没有
WM_SETMINMAXINFO
消息,因此,您可能需要重写WinProc来处理WM_GETMINMAXINFO
并返回虚假数据……但无论如何,请先尝试一下,看看它是否适合您:
public class ConstrainedWindow : Window
{
public ConstrainedWindow()
{
this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
}
}
我已经尝试了你的第二个建议,但是由于-7的边距,这导致窗口仍然向上和向左移动了7个像素,并且7个像素太短,无法填充屏幕的其余部分。我最终使用了您的第一个建议,并重写了WM_GETMINMAXINFO以返回活动监视器的正确维度。谢谢