Plein-écran : réaction bizarre ?

Résolu
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 1 mai 2006 à 15:14
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 - 1 mai 2006 à 19:46
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

bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
1 mai 2006 à 19:46
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.
3
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
1 mai 2006 à 19:08
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;
        }
0
bubbathemaster Messages postés 339 Date d'inscription dimanche 26 janvier 2003 Statut Membre Dernière intervention 25 mars 2009 4
1 mai 2006 à 19:18
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
0
Rejoignez-nous