Xna 如何在MonoGame中获得底层窗口?

Xna 如何在MonoGame中获得底层窗口?,xna,opentk,monogame,Xna,Opentk,Monogame,我正在将从XNA转换为MonoGame Gleed2D是一个Windows窗体应用程序,它实例化了一个XnaGame。然后隐藏由游戏创建的窗口,并将设备窗口句柄设置为主窗体上的画布 我知道这有点过分;代码本身就说明了这一点:。 相关位位于构造函数中: _drawSurface = mainForm.GetHandleToCanvas(); _graphics = new GraphicsDeviceManager( this )

我正在将从XNA转换为MonoGame

Gleed2D是一个Windows窗体应用程序,它实例化了一个
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句柄。 祝你好运