【发布时间】:2022-05-16 22:11:46
【问题描述】:
我的无边框 WPF 窗口出现问题。具体来说,它在窗口任务栏上方最大化,并且还以 -7 边距最大化,使窗口在每个方向上超出屏幕 7 个像素。
这在winforms中很容易通过设置窗口的MaximizedBounds属性来解决,但是WPF没有这个属性。
我尝试通过 WndProc 拦截最大化消息并手动设置大小/位置来解决此问题,但这会导致将 RestoreRegion 覆盖为最大化大小/位置,从而无法恢复窗口。
所以,我认为我可以通过 PInvoke 设置窗口的 MaximizedBounds。
This page 暗示它可以用 Win32 SetWindowPlacement 来完成...它需要一个称为 WINDOWPLACEMENT 的结构:
[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;
}
我认为我只需要设置 Rectanle 和一个标志来指定它是用于 MaximizedBound 属性的,但是我在网上找不到任何这样的例子,而且我发现的标志都不像做到这一点。我在吠叫错误的树吗?如果是这样,是否有任何其他方法来指定我忽略的 MaximizedBound(或类似)?
【问题讨论】: