无法以编程方式最小化 Window
Can't Programmatically Minimize Window
我正在尝试为我的游戏创建一个自定义标题栏,其他一切都按我想要的方式工作,但如果不使用 windows 中的 windows 按钮,我无法将其最小化=]帧.
我有一个游戏class,构造函数中有这些:
'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
无论我是在运行时还是在启动期间定义 AsWindow,调用最小化都会导致 AsWindow 出现 "System.NullReferenceException"。
请注意,我添加了 "System.Windows.Forms" 作为参考。
我尝试过的事情:
您面临的问题是 MonoGame API(与 XNA 完全一样)没有公开控制 window 的直接方式。这有点道理,因为 MonoGame 支持没有 "window" 概念的平台可以这么说。
但是,通常可以访问底层平台特定代码并解决这些问题。但是请务必记住,这种方法将特定于平台,如果 MonoGame 在后台发生变化,则可能会中断。
我最后查了一下,在幕后,MonoGame 在 Windows 桌面平台上使用 SDL。这可能不再是真的,但我在一个旧项目中确实有一些代码给出了一般的想法。我的代码在 C# 中,但它应该为您指明正确的方向。
第一步是从SDL.dll导入你想要的方法。此非托管代码是否不能像通常在 .NET 项目中那样引用它。
[DllImport("SDL2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SDL_MaximizeWindow(IntPtr window);
一旦您有权访问该方法,您就可以通过传入 window 句柄来调用它。
SDL_MaximizeWindow(Window.Handle);
显然,这是最大化 window 的代码(这是我手边唯一的代码),但我相信您可以自己弄清楚如何实现最小化版本。
我正在尝试为我的游戏创建一个自定义标题栏,其他一切都按我想要的方式工作,但如果不使用 windows 中的 windows 按钮,我无法将其最小化=]帧.
我有一个游戏class,构造函数中有这些:
'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
无论我是在运行时还是在启动期间定义 AsWindow,调用最小化都会导致 AsWindow 出现 "System.NullReferenceException"。
请注意,我添加了 "System.Windows.Forms" 作为参考。
我尝试过的事情:
您面临的问题是 MonoGame API(与 XNA 完全一样)没有公开控制 window 的直接方式。这有点道理,因为 MonoGame 支持没有 "window" 概念的平台可以这么说。
但是,通常可以访问底层平台特定代码并解决这些问题。但是请务必记住,这种方法将特定于平台,如果 MonoGame 在后台发生变化,则可能会中断。
我最后查了一下,在幕后,MonoGame 在 Windows 桌面平台上使用 SDL。这可能不再是真的,但我在一个旧项目中确实有一些代码给出了一般的想法。我的代码在 C# 中,但它应该为您指明正确的方向。
第一步是从SDL.dll导入你想要的方法。此非托管代码是否不能像通常在 .NET 项目中那样引用它。
[DllImport("SDL2.dll", CallingConvention = CallingConvention.Cdecl)]
public static extern void SDL_MaximizeWindow(IntPtr window);
一旦您有权访问该方法,您就可以通过传入 window 句柄来调用它。
SDL_MaximizeWindow(Window.Handle);
显然,这是最大化 window 的代码(这是我手边唯一的代码),但我相信您可以自己弄清楚如何实现最小化版本。