我正在将 Gleed2D 从XNA转换为MonoGame。
Gleed2D是一个 Windows窗体应用程序,用于实例化XnaGame
。然后隐藏window
创建的Game
,并将DeviceWindowHandle
设置为主表单上Canvas
的{{1}}。
我知道这有点拗口;代码说不出话来:here it is in full 相关位在构造函数中:
_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中,Window.Handle
可以转换为Form
。在MonoGame中,它被实现为OpenTK.GameWindow
。 如何进入实际窗口以便隐藏和/或调整大小?。另一个问题是:如何创建MonoGame Game
并告诉它渲染表面是另一个控件的表面?
答案 0 :(得分:1)
在创建原生窗口之前,OpenTK的GameWindow还有很长的路要走。在此页面上,您可以看到本机实现:https://github.com/mono/opentk/blob/master/Source/OpenTK/Platform/Windows/WinGLNative.cs
我的解决方案是破解OpenTK的源代码或在OpenTK论坛中提问。
答案 1 :(得分:1)
不确定这是否有帮助但是在MonoGame游戏构造函数中它将GraphicsDeviceManager初始化为一个名为_graphics的变量。哪个对象可以获得当前的GraphicsDevice Manager,它有一个名为SetRenderTarget和SetRenderTargets的方法。你可以通过这个获取Handle到游戏窗口.Window.Handle“this”是当前的游戏对象。此外,在Graphics设备中有一个Present方法,您可以传递源和目标Rectangle以及任何Windows句柄。 祝你好运。