[英]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.