2012-11-16 87 views
0

我無法使用我的無邊框WPF窗口。具體來說,它是在Windows任務欄上方最大化的,並且還具有-7邊距最大化,使窗口在每個方向上最大化超出屏幕7個像素。是否可以通過PInvoke指定WPF窗口的MaximizedBounds?

通過設置窗口的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(或類似的)?

回答

0

我會嘗試這樣的事情,然後再去P/Invoke路由 - 沒有WM_SETMINMAXINFO消息,我知道,所以你可能需要覆蓋你的WinProc來處理WM_GETMINMAXINFO並返回虛假數據....但不管怎麼說,先試試這個,看看它是否適合你:

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

} 
+0

我已經試過你的第二個建議,但由於-7保證金,這導致窗口仍然被轉移7像素向上和向左,並且7個像素太短而不能填充屏幕的其餘部分。我最終使用了第一個建議,並且我覆蓋了WM_GETMINMAXINFO以返回活動監視器的正確尺寸。謝謝! – Chronicide

相關問題