MonoGame最大化窗口事件

时间:2017-07-28 00:21:26

标签: c# mono xna monogame

我一直在尝试使用monogame和c#实现事件。目前,当我调整窗口大小时,我会调用一个事件:

        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;

然而,这是一个我不是特别喜欢的解决方案,因为它依赖于 System.Windows.Forms 的包含,因为我可能有一天想要为其他平台构建id而不是包含任何特定的Windows库。

是否有任何单一游戏功能可以处理每个平台的最大化/最小化事件调用,还是由最终用户实现此类功能?

1 个答案:

答案 0 :(得分:1)

我也遇到过这个问题,并且在MonoGame API中没有找到任何“内置”解决方案。

我想出的解决方案是在每个帧的开头检查Window.ClientBounds的宽度和高度是否发生了变化。
它会检测与Window.ClientSizeChanged事件类似的所有窗口大小调整,但也会检测通过最大化/恢复窗口所做的调整大小。