簡體   English   中英

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

[英]Is it possible to specify the MaximizedBounds of a WPF window via PInvoke?

我的無邊框 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 (或類似的)?

在走 P/Invoke 路線之前,我會嘗試這樣的事情 - 我知道沒有WM_SETMINMAXINFO消息,所以你可能需要覆蓋你的 WinProc 來處理WM_GETMINMAXINFO並返回虛假數據......但無論如何,先試試這個,看看它是否適合你:

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

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM