2017-07-28 98 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