【问题标题】:How to maximize window in XNA如何在 XNA 中最大化窗口
【发布时间】:2012-08-02 22:18:14
【问题描述】:

这应该是一个非常简单的问题,但经过大量搜索后,似乎没有任何工作示例。 我只想让我的 XNA 窗口开始最大化。 我知道如何设置窗口的宽度和高度,但这并不完全相同。 我还需要在不全屏的情况下执行此操作。我只想要一个正常的最大化窗口。

【问题讨论】:

    标签: c# xna window maximize


    【解决方案1】:

    将图形设备管理器的IsFullScreen属性设置为true。

    http://msdn.microsoft.com/en-us/library/bb195024(v=xnagamestudio.10).aspx

        //from the above msdn sample
        graphics = new GraphicsDeviceManager( this );
        content = new ContentManager( Services );
    
        graphics.PreferredBackBufferWidth = 800;
        graphics.PreferredBackBufferHeight = 600;
        graphics.PreferMultiSampling = false;
        graphics.IsFullScreen = true;
    

    http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphicsdevicemanager.isfullscreen(v=xnagamestudio.10).aspx

    【讨论】:

    • 您可能还需要致电graphics.ApplyChanges();
    • @JohnMcDonald 嗯,也许,我这台机器上没有 xna 可以检查。
    • 我可能应该提到我不想全屏显示。我仍然需要最小化/最大化/关闭按钮可见。
    • @Frobot 嗯,是的,这是一个重要的细节。
    • @Frobot XNA 窗口仍然只是一个窗口。调用普通的 windows API 来最大化它。
    【解决方案2】:

    @Cyral 有迄今为止最接近的答案,但它仍然不是你想要的。要最大化 Windows 窗体,请使用 WindowState 属性:

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

    【讨论】:

    • 这看起来不错,但我如何才能访问 XNA 中的 Form 类?如果我尝试使用 System.Windows.Form 引用它,则找不到它。如果我尝试在顶部添加“使用 System.Windows”,它也找不到。
    • 您需要在您的 XNA 项目中添加对 System.Windows.Forms.dll 程序集的引用,并且可能还需要添加对 System.Drawing.dll 的引用。
    • 非常感谢,我现在正在学习如何添加这样的引用,但现在可以正常工作了。
    • 还可以添加 ...(System.Windows.Forms.Form)System.Windows.Form.FromHa.... 等,这样您就不会产生歧义
    【解决方案3】:

    您可以添加对 System.Windows.Forms 和 System.Drawing 的引用(但是,由于模棱两可,您需要输入命名空间)

    在base.Initialize之后使用如下代码

    Form form = (Form)Form.FromHandle(Window.Handle);
    form.Location = Point(0, 0);
    form.Size = Screen.PrimaryScreen.WorkingArea.Size;
    

    【讨论】:

      【解决方案4】:

      其他人已经介绍了自动最大化的步骤,但要启用实际的最大化按钮以便用户可以在需要时进行操作,请在游戏构造函数中执行此操作:

      Window.AllowUserResizing = true; 
      

      根据您希望游戏在调整大小开始和结束时的行为方式,或者暂停游戏,您可能需要处理其中一些事件。

          Form form = (Form)Form.FromHandle(Window.Handle);
          form.ResizeBegin += new EventHandler(form_ResizeBegin);
          form.ResizeEnd += new EventHandler(form_ResizeEnd);
          form.LocationChanged += new EventHandler(form_LocationChanged);
      

      【讨论】:

        【解决方案5】:
        _graphics = new GraphicsDeviceManager(this);
        DisplayMode displayMode = GraphicsAdapter.DefaultAdapter.CurrentDisplayMode;
        this._graphics.PreferredBackBufferFormat = displayMode.Format;
        this._graphics.PreferredBackBufferWidth = (int)(displayMode.Width);
        this._graphics.PreferredBackBufferHeight = (int)(displayMode.Height);
        

        有点对我有用,但不完全,一旦你尝试你就会明白。我的意思是,它并不完美,我敢肯定有更好的方法,但对于原型设计,这应该可以工作 - 或者通过一些调整你可以获得你需要的东西。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-23
          • 2011-12-11
          • 1970-01-01
          • 1970-01-01
          • 2010-10-17
          • 2017-07-30
          相关资源
          最近更新 更多