2017-07-28 7 views
1

J'ai eu des difficultés à essayer d'implémenter un événement en utilisant monogame et C#. À l'heure actuelle quand ma fenêtre est redimensionnée j'appelle un événement:MonoGame Agrandir l'événement de la fenêtre

 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(); 
      } 
     } 

Tout cela est bien et redimensionne correctement ma fenêtre et met à jour la largeur/hauteur. Toutefois, il n'est pas déclenché dans le cas où ma fenêtre est redimensionnée via un utilisateur en cliquant sur le bouton Agrandir/Réduire sur le cadre de la fenêtre.

Après avoir passé quelque temps à la recherche dans des solutions la seule suggestion de mettre en œuvre un événement Maximize était de here:

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

Cependant ceci est une im solution ne raffole pas car il repose sur l'inclusion de système .Windows.Forms et puisque je peux un jour vouloir construire pour d'autres plates-formes plutôt que d'inclure des bibliothèques Windows spécifiques.

Existe-t-il une fonctionnalité monogame qui gère les appels d'événement maximiser/minimiser pour chaque plateforme ou est-ce à l'utilisateur final d'implémenter une telle fonctionnalité?

+1

Windows Forms est pris en charge sur plusieurs plates-formes via Mono, en fonction de la plate-forme que vous souhaitez prendre en charge, cela ne constitue même pas un problème http://www.mono-project.com/docs/gui/winforms/ –

Répondre

1

J'ai également eu ce problème et je n'ai trouvé aucune solution «intégrée» pour cela dans l'API MonoGame.

La solution que j'ai trouvée consistait à vérifier au début de chaque trame si la largeur et la hauteur de Window.ClientBounds avaient été modifiées.
Il détecte toutes les redimensionnements de fenêtre de la même manière que l'événement Window.ClientSizeChanged, mais détecte également les redimensionnements effectués en maximisant/restaurant la fenêtre.

+0

réponse et le commentaire sont corrects mais j'ai choisi d'implémenter votre suggestion car elle semblait plus modifiable si le code change. Cependant, il semble de toute façon si vous voulez recréer une résolution particulière et l'état de la fenêtre (maximisé ou minimisé), alors vous devez utiliser winforms .... agaçant ... car il semble que la seule façon de garantir sa taille correcte + maximisée. De toute façon une solution utile! merci – D3181

+0

Notez que lorsque le client minimise, vous aurez un ClientBounds de (0, 0, 0, 0) alors prenez cela en compte si vous vérifiez chaque mise à jour. – Jono