2017-07-28 10 views
1

私はmonogameとc#を使用してイベントを実装しようとしています。現在、ウィンドウのサイズを変更すると、イベントが呼び出されます。MonoGameウィンドウイベントを最大化する

 this.Window.ClientSizeChanged += new EventHandler<EventArgs>(Window_ClientSizeChanged); 

     void Window_ClientSizeChanged(object sender, EventArgs e) 
     { 
      int width = Window.ClientBounds.Width; 
      int height = Window.ClientBounds.Height; 
      if (width > 0 && height > 0) 
      { 
       graphics.PreferredBackBufferWidth = width; 
       graphics.PreferredBackBufferHeight = height; 
       graphics.ApplyChanges(); 
      } 
     } 

これはすべて正常にウィンドウをサイズ変更し、幅と高さを更新します。しかし、ウィンドウ枠の最大化/最小化ボタンをクリックしたときに、ウィンドウのサイズが変更された場合にはトリガされません。最大化イベントを実装するための唯一の提案はhereからだったいくつかのソリューションを検討していくつかの時間を過ごした後

Form form = (Form)Control.FromHandle(Window.Handle); 
form.WindowState = FormWindowState.Maximized; 

それはシステムを含めることに依存しているとして、しかし、これは特に好きではないソリューションのイムです.Windows.Formsと私はある日、他のプラットフォームのidをビルドしたいと思っているので、特定のWindowsライブラリは含まれていません。

各プラットフォームの最大化/最小化イベントコールを処理するモノゲーム機能はありますか?またはエンドユーザーがそのような機能を実装するのは最大ですか?

+1

Windowsフォームは、サポートしたいplattformに応じて、Mono経由で複数のplattformでサポートされていますが、これは問題ではありません。http://www.mono-project.com/docs/gui/winforms/ –

答えて

1

私もこの問題を抱えており、MonoGame APIの「組み込み」ソリューションは見つかりませんでした。

私が思いついた解決策は、各フレームの最初に、Window.ClientBoundsの幅と高さが変更されたかどうかをチェックしていました。
Window.ClientSizeChangedイベントと同様に、すべてのウィンドウのサイズ変更を検出しますが、ウィンドウを最大化/復元したときのサイズ変更も検出します。

+0

答えとコメントは正しいですが、私はあなたの提案を実装することを選択しました。しかし、特定の解像度とウィンドウの状態(最大化または最小化)を再作成したい場合は、winforms .... annoyinglyを使用する必要があります。正しいサイズ+最大化を保証する唯一の方法だと思われます。いずれにしても役立つ解決策です!ありがとう – D3181

+0

クライアントが最小化すると、ClientBoundsは(0、0、0、0)になりますので、すべてのアップデートをチェックしている場合はそれを考慮に入れてください。 – Jono

関連する問題