是否可以通过PInvoke指定WPF窗口的MaximizedBounds?

时间:2012-11-16 22:05:07

标签: c# wpf pinvoke

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

通过设置窗口的MaximizedBounds属性可以在winforms中轻松解决,但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(或类似)?

1 个答案:

答案 0 :(得分:0)

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

WM_GETMINMAXINFO