Plein-écran : réaction bizarre ? [Résolu]

Signaler
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
-
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
-
J'ai une application qui est sensé se mettre en plein écran via ce ptit code :

FullScreen est une variable globale de type boolean qui determine si l'application est en mode plein écran ou pas.

Le code est sensé etre très simple :
Pour passer en plein écran :
    Je passe les toolbars, menus et status bar sur visible=false
    Je passe la forme en maximized, pas de border et en TopMost
Pour revenir en mode fenêtré, je fais l'inverse.

Ce qui est étrange, c'est que la première fois que l'on lance le plein écran, ca marche.
Quand on ferme le plein écran, la statusbar ne réapparrait pas.
La deuxième fois qu'on lance le plein écran, et pour les fois suivantes aussi, la barre des tâches reste visible et la fermeture du plein écran fonctionne comme prévu.

Le debugging stetp by step ne me donne pas grand chose. Je commence à m'arracher les cheveux :<

        //void ToggleFullScreen()
        /*
         * KNOWN ISSUES :
         * + fullscreen works correcly the first time you launch it
         *   afterward, the taskbar stays on top
         * + the first time you close the fullscreen mode, the statusbar
         *   doesnt come back
         */
        void ToggleFullScreen()
        {
            if (!FullScreen)
            {   //activate fullscreen
                menuStrip1.Visible = false;
                toolStrip1.Visible = false;
                statusStrip1.Visible = false;
                this.TopMost = true;
                this.FormBorderStyle = FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
                CurrentPictureStyle = 1;
                RefreshPictureStyle();
                RefreshForm();
            }
            else
            {
                statusStrip1.Visible = true;
                menuStrip1.Visible = true;
                toolStrip1.Visible = true;
                this.TopMost = false;
                this.FormBorderStyle = FormBorderStyle.Sizable;
                CurrentPictureStyle = 1;
                RefreshPictureStyle();
                RefreshForm();
            }
            FullScreen = !FullScreen;
        }

3 réponses

Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
void ToggleFullScreen()
{
            if (!FullScreen)
            {   //activate fullscreen
                
                //save settings before toggling fullscreen
                FullScreenOldState = this.WindowState;
                FullScreenOldPictureStyle = CurrentPictureStyle;

                if (this.WindowState == FormWindowState.Maximized)
                    this.WindowState = FormWindowState.Normal; //hack :<
                menuStrip1.Visible = false;
                toolStrip1.Visible = false;
                statusStrip1.Visible = false;
                this.TopMost = true;
                this.FormBorderStyle = FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
                CurrentPictureStyle = 1;
                RefreshPictureStyle();
                //RefreshForm();
            }
            else
            {
                statusStrip1.Visible = true;
                menuStrip1.Visible = true;
                toolStrip1.Visible = true;
                this.TopMost = false;
                this.FormBorderStyle = FormBorderStyle.Sizable;
                this.WindowState = FormWindowState.Normal;

                //restore settings
                CurrentPictureStyle = FullScreenOldPictureStyle;
                this.WindowState = FullScreenOldState;
                RefreshPictureStyle();
                RefreshForm();
            }
            FullScreen = !FullScreen;
}

Voilà comment c'est codé du coup : les règles utilisateurs de la fenetre (maximisé ou pas) sont stockées puis restaurées quand on quitte le fullscreen. Bref, ca reste "sale" je pense, mais en attendant ca marche.
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
37
Salut,

 void ToggleFullScreen()
        {
            if (!FullScreen)
            {   //activate fullscreen
                menuStrip1.Visible = false;
                toolStrip1.Visible = false;
                statusStrip1.Visible = false;
                this.TopMost = true;
                this.FormBorderStyle = FormBorderStyle.None;
                this.WindowState = FormWindowState.Maximized;
                CurrentPictureStyle = 1;
                RefreshPictureStyle();
                RefreshForm();
            }
            else
            {
                statusStrip1.Visible = true;
                menuStrip1.Visible = true;
                toolStrip1.Visible = true;
                this.TopMost = false;
                this.FormBorderStyle = FormBorderStyle.Sizable;
                this.WindowState = FormWindowState.Normal;
                CurrentPictureStyle = 1;
                RefreshPictureStyle();
                RefreshForm();
            }
            FullScreen = !FullScreen;
        }
Messages postés
339
Date d'inscription
dimanche 26 janvier 2003
Statut
Membre
Dernière intervention
25 mars 2009
4
Effectivement, ca semble régler le problème, mais pas tout en fait.

Si on part d'une fenetre deja maximisé, le problème reste entier. Le hack consiste donc en un
                if (this.WindowState == FormWindowState.Maximized)
                    this.WindowState = FormWindowState.Normal;
Que j'ai rajouté au début de "activate fullscreen". Mais ce n'est pas très propre. De meme, si l'utilisateur etait en maximised, en quittant le fullscreen, il s'attend à revenir en maximised, mais à la place il revient en normal ...

Mais y'a du mieux :p