Xna 如何在MonoGame中获得底层窗口?
我正在将从XNA转换为MonoGame Gleed2D是一个Windows窗体应用程序,它实例化了一个Xna 如何在MonoGame中获得底层窗口?,xna,opentk,monogame,Xna,Opentk,Monogame,我正在将从XNA转换为MonoGame Gleed2D是一个Windows窗体应用程序,它实例化了一个XnaGame。然后隐藏由游戏创建的窗口,并将设备窗口句柄设置为主窗体上的画布 我知道这有点过分;代码本身就说明了这一点:。 相关位位于构造函数中: _drawSurface = mainForm.GetHandleToCanvas(); _graphics = new GraphicsDeviceManager( this )
XnaGame
。然后隐藏由游戏创建的窗口
,并将设备窗口句柄
设置为主窗体上的画布
我知道这有点过分;代码本身就说明了这一点:。
相关位位于构造函数中:
_drawSurface = mainForm.GetHandleToCanvas();
_graphics = new GraphicsDeviceManager( this )
{
PreferredBackBufferWidth = 800,
PreferredBackBufferHeight = 600
} ;
_graphics.PreparingDeviceSettings += graphics_PreparingDeviceSettings;
_winform = (Form)Form.FromHandle(Window.Handle);
_winform.VisibleChanged += game1VisibleChanged;
_winform.Size = new Size(10, 10);
Mouse.WindowHandle = _drawSurface;
Size pictureBoxSize = _mainForm.CanvasSize ;
ResizeBackBuffer( pictureBoxSize.Width, pictureBoxSize.Height ) ;
... some other stuff....
void graphics_PreparingDeviceSettings(object sender, PreparingDeviceSettingsEventArgs e)
{
e.GraphicsDeviceInformation.PresentationParameters.DeviceWindowHandle = _drawSurface;
}
我的问题是:在XNA中,窗口.Handle
可以转换为形式
。在MonoGame中,它实现为一个OpenTK.GameWindow
如何到达实际窗口以便隐藏和/或调整其大小?。另一个问题是:如何创建一个单一游戏游戏
,并告诉它渲染面是另一个控件的渲染面?在创建本机窗口之前,OpenTK的游戏窗口要走很长的路。在此页面上,您可以看到本机实现:
我的解决方案是破解OpenTK的源代码或在OpenTK论坛上提问。不确定这是否有帮助,但在MonoGame游戏构造函数中,它将GraphicsDeviceManager初始化为一个名为_graphics的变量。您可以从该对象获取当前图形设备管理器,该管理器具有名为SetRenderTarget和SetRenderTargets的方法。您还可以通过this.Window.Handle获得游戏窗口的句柄,其中“this”是当前游戏对象。图形设备中还有一种当前方法,您可以传递源矩形和目标矩形以及任何Windows句柄。
祝你好运