5

Gleed2Dを XNA から MonoGame に 変換しています。

Gleed2D は、インスタンス化するWindows フォーム アプリケーションですXnaGamewindowによって作成されたはGame非表示になり、はメイン フォームDeviceWindowHandleの に設定されます。Canvas

私はそれがちょっとしたことを知っています。コードはそれ自体を物語っています。ここでは完全です。
関連するビットはコンストラクターにあります。

            _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、レンダリング サーフェスが別のコントロールのものであることを伝えるにはどうすればよいですか?

4

2 に答える 2

1

OpenTK の GameWindow は、ネイティブ Window が作成される前に、かなり長い道のりを歩みます。このページでは、ネイティブ実装を確認できます: 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 という変数に初期化します。このオブジェクトは、SetRenderTarget および SetRenderTargets というメソッドを持つ現在の GraphicsDevice Manager を取得できます。ゲーム ウィンドウへのハンドルを取得することもできます。これには、「this」が現在のゲーム オブジェクトである this.Window.Handle を使用します。また、Graphics デバイスには、ソースと宛先の Rectangle と任意の Windows ハンドルを渡すことができる Present メソッドがあります。幸運を。

于 2013-03-11T08:29:09.247 に答える