Partage
  • Partager sur Facebook
  • Partager sur Twitter

[C#] Supprimer le cadre d'une fenêtre

XNA

Sujet résolu
    27 août 2011 à 0:45:18

    Bonjour, je développe un jeu avec XNA, et je souhaiterais donc supprimer le cadre de la fenêtre pour le faire moi même dans la fenêtre du jeu.

    Donc y a t il un moyen de supprimer le cadre (le cadre où se trouve le logo, et les boutons de réduction, de fermeture et d'agrandissement) ?

    Merci d'avance pour vos réponses ^^ .
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      27 août 2011 à 12:16:42

      Il doit y'avoir un système comme vb/c# FormBorderStyle :) Tu le met sur None ou Aucuns et ca devrait marcher.
      • Partager sur Facebook
      • Partager sur Twitter
        27 août 2011 à 12:23:34

        Il n'y a pas de moyen directement avec XNA d'enlever les bordures par contre tu peux utiliser l'interop de .NET pour faire ça à un niveau inférieur (en utilisant l'API Win32).

        J'ai trouvé un code sur internet que j'ai adapté pour XNA.

        Voici une classe qui va te permettre de faire l'action.
        public class RemoveWindowBorder
        {
            //Sets window attributes   
            [DllImport("USER32.DLL")]
            public static extern int SetWindowLong(IntPtr hWnd, int nIndex, int dwNewLong);
        
            //Gets window attributes   
            [DllImport("USER32.DLL")]
            public static extern int GetWindowLong(IntPtr hWnd, int nIndex);
        
            //assorted constants needed   
            public static int GWL_STYLE = -16;
            public static int WS_CHILD = 0x40000000; //child window   
            public static int WS_BORDER = 0x00800000; //window with border   
            public static int WS_DLGFRAME = 0x00400000; //window with double border but no title   
            public static int WS_CAPTION = WS_BORDER | WS_DLGFRAME; //window with a title bar   
        
            public static void RemoveBorderToWindow(IntPtr hWndGame)
            {
                int oldStyle = GetWindowLong(hWndGame, GWL_STYLE);
                SetWindowLong(hWndGame, GWL_STYLE, (oldStyle & ~WS_CAPTION));
            }
        }
        


        Tu n'as alors plus qu'à appeler la méthode RemoveBorderToWindow en lui passant le handle de ta fenêtre dans le constructeur de ton jeu.

        RemoveWindowBorder.RemoveBorderToWindow(Window.Handle);
        


        Et le tour est joué. :D

        Attention tout de même parce que ce n'est pas une utilisation "classique" donc il faut faire attention à l'ergonomie finale de ton jeu pour que la fermeture / réduction / agrandissement de la fenêtre soit évident pour le joueur.


        Edit: En fait il existe une solution plus simple qui permet d'utiliser ce qu'à dit Mazaki. Il faut rajouter une référence vers System.Windows.Forms et ensuite dans le constructeur de ton jeu tu peux utiliser.
        Form form = (Form)Form.FromHandle(Window.Handle);
        form.FormBorderStyle = FormBorderStyle.None;
        
        • Partager sur Facebook
        • Partager sur Twitter
          27 août 2011 à 18:43:06

          J'ai testé les 2 méthodes qui marchent très bien. Merci.
          Et je prendrais la seconde qui est plus simple aussi pour le reste de mon utilisation sur la fenêtre (changement de cursor etc..).

          Un grand merci, je bloquais vraiment ^^ .
          • Partager sur Facebook
          • Partager sur Twitter

          [C#] Supprimer le cadre d'une fenêtre

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown