我正在尝试为我的游戏创建一个自定义的TitleBar,我可以按照我想要的其他方式工作,但是如果不使用Windows框架中的Windows按钮,就无法使其最小化。
我在构造函数中有一个Game类:
'Having this here or in the constructor doesn't make any difference
Public AsWindow As Windows.Forms.Form = CType(Windows.Forms.Form.FromHandle(Me.Window.Handle), Windows.Forms.Form)
Public Sub New()
Window.AllowUserResizing = False
Window.IsBorderless = True
end sub
Public Sub Minimize()
AsWindow.WindowState = System.Windows.Forms.FormWindowState.Minimized
End Sub
调用Minimize会导致AsWindow上出现“ System.NullReferenceException”,无论我是在运行时还是在启动期间定义AsWindow。
请注意,我已添加“ System.Windows.Forms”作为参考。
我尝试过的事情:
答案 0 :(得分:1)
您面临的问题是MonoGame API(与XNA完全一样)不会公开控制窗口的直接方法。这样说是有道理的,因为可以说MonoGame支持没有“窗口”概念的平台。
但是,通常可以访问底层平台特定的代码并解决这些问题。但是请务必牢记,这种方法将针对特定平台,并且如果MonoGame在后台更改可能会中断。
最后我检查了一下,MonoGame在Windows桌面平台上使用SDL。这可能不再成立了,但是我在一个提供了总体思路的旧项目中确实有一些代码。我的代码在C#中,但它应该为您指明正确的方向。
第一步是从SDL.dll导入所需的方法。这个非托管代码,您无法像在.NET项目中那样正常引用它。
[DllImport("SDL2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SDL_MaximizeWindow(IntPtr window);
一旦可以访问该方法,就可以通过传递窗口句柄来调用它。
SDL_MaximizeWindow(Window.Handle);
很显然,这是最大化窗口的代码(这是我手头唯一的代码),但是我敢肯定,您可以自己弄清楚如何最小化版本。