0

我的无边框 WPF 窗口有问题。具体来说,它在窗口任务栏上方最大化,并且还以 -7 边距最大化,使窗口在每个方向上超出屏幕 7 个像素。

这可以通过设置窗口的 MaximizedBounds 属性在 winforms 中轻松解决,但 WPF 没有此属性。

我尝试通过 WndProc 拦截最大化消息并手动设置大小/位置来解决这个问题,但这存在将 RestoreRegion 覆盖为最大化大小/位置的问题,从而消除了恢复窗口的能力。

所以,我想我也许可以通过 PInvoke 设置窗口的 MaximizedBounds。

这个页面暗示它可以用 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 (或类似的)?

4

1 回答 1

0

在走 P/Invoke 路线之前,我会尝试这样的事情 - 没有WM_SETMINMAXINFO我知道的消息,所以你可能需要覆盖你的 WinProc 来处理WM_GETMINMAXINFO并返回虚假数据......但无论如何,先试试这个,看看它是否适合你:

public class ConstrainedWindow : Window
{
    public ConstrainedWindow()
    {
        this.MaxHeight = SystemParameters.MaximizedPrimaryScreenHeight;
        this.MaxWidth = SystemParameters.MaximizedPrimaryScreenWidth;
    }

}
于 2012-11-17T02:54:48.613 回答