5

我正在将Gleed2D从 XNA 转换为 MonoGame。

Gleed2D 是一个Windows 窗体应用程序,它实例化一个XnaGame. 然后隐藏window由创建的并在主窗体上设置为 a 。GameDeviceWindowHandleCanvas

我知道这有点拗口;代码不言自明:这里是完整的
相关位在构造函数中:

            _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. 如何进入实际窗口以便隐藏和/或调整其大小?. 另一个问题是:我怎样才能创建一个 MonoGameGame并告诉它渲染表面是另一个控件的表面?

4

2 回答 2

1

在创建原生 Window 之前,OpenTK 的 GameWindow 走了很长一段路。在此页面上,您可以看到本机实现:https ://github.com/mono/opentk/blob/master/Source/OpenTK/Platform/Windows/WinGLNative.cs

我的解决方案是破解 OpenTK 的源代码或在 OpenTK 论坛中提问。

于 2012-10-17T19:07:12.790 回答
1

不确定这是否有帮助,但在 MonoGame 游戏构造函数中,它将 GraphicsDeviceManager 初始化为一个名为 _graphics 的变量。哪个这个对象你可以得到当前的GraphicsDevice Manager,它有一个名为SetRenderTarget和SetRenderTargets的方法。您还可以通过 this.Window.Handle 获取游戏窗口的句柄,其中“this”是当前游戏对象。图形设备中还有一个 Present 方法,您可以传递源和目标 Rectangle 以及任何 Windows 句柄。祝你好运。

于 2013-03-11T08:29:09.247 回答