2017-07-28 94 views
1

我一直嘗試使用monogame和c#實現事件。目前,當調整我的窗口,我調用事件:MonoGame最大化窗口事件

 this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged); 

     void Window_ClientSizeChanged(object sender, EventArgs e) 
     { 
      int width = Window.ClientBounds.Width; 
      int height = Window.ClientBounds.Height; 
      if (width > 0 && height > 0) 
      { 
       graphics.PreferredBackBufferWidth = width; 
       graphics.PreferredBackBufferHeight = height; 
       graphics.ApplyChanges(); 
      } 
     } 

這是所有罰款和正確調整大小我的窗口,更新寬度/高度。但是,如果通過用戶單擊窗口框架上的最大化/最小化按鈕調整窗口大小,則不會觸發它。

花一些時間尋找到的一些解決方案的唯一的建議,以實現最大化的事件後,從here

Form form = (Form)Control.FromHandle(Window.Handle); 
form.WindowState = FormWindowState.Maximized; 

然而,這是一個解決方案我不是特別喜歡,因爲它依賴於包含系統.Windows.Forms,因爲我可能有一天想建立其他平臺的ID,而不是包括任何特定的Windows庫。

是否有任何monogame功能可以處理每個平臺的最大化/最小化事件調用,還是由最終用戶來實現此類功能?

+1

Windows窗體通過單聲道支持多個平臺,具體取決於您要支持的平臺,這甚至不是問題http://www.mono-project.com/docs/gui/winforms/ –

回答

1

我也有過這個問題,並沒有在MonoGame API中找到任何「內置」解決方案。

我想出的解決方案是在每幀開始時檢查Window.ClientBounds的寬度和高度是否發生了變化。
它檢測與Window.ClientSizeChanged事件類似的所有窗口大小調整,但還檢測通過最大化/恢復窗口進行的大小調整。

+0

答案和評論是正確的,但我選擇實施你的建議,因爲如果代碼庫發生變化,它似乎更容易修改。然而,如果你想重新創建一個特定的分辨率和窗口狀態(最大化或最小化),似乎任何一種方式,那麼你需要使用winforms ....煩人......因爲它似乎是唯一的方法來確保其正確的大小+最大化。無論哪種方式,一個有用的解謝謝 – D3181

+0

請注意,當客戶端最小化時,您將擁有(0,0,0,0)的ClientBounds,因此如果您正在檢查每個更新,請考慮此因素。 – Jono