[c#] Form maximized et Taskbar

Signaler
Messages postés
7
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
29 juin 2005
-
Messages postés
7
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
29 juin 2005
-
1)
Alors voici mon problème:
il faut deux écrans
je crée une nouvelle application C#
je met ma form en Maximized dans le concepteur par exemple..
je lance l'application...
Ma form est bien maximisée
Je déplace la barre des tâches sur un autre écran..
et la (ca le fais chez moi en tout cas) la form reste telle quelle (elle flicker comme si elle allé être redimensionné) et n'est pas automatiquement resizé aux nouvelles dimensions de la WorkingArea...
Alors si on la dé-maximize et on la remaximize à la main, elle prends bien une dimension cohérente à savoir la Working area... pourquoi ?? et comment corriger ceci ??

2)WM_WINDOWPOSCHANGED

En mode debug pas a pas, c'est appelé trois fois apres déplacement de la taskbar:
un qui m'aggrandi ma fenetre a la bonne workingarea
un qui me reduit ma fenettre a la mauvaise workingarea
un qui m'aggrandi ma fenetre a la bonne workingarea
A la suite de ca ma form est bien redimensionné

En mode normal, c'est appelé deux fois apres déplacement de la taskbar:
un qui m'aggrandi ma fenetre a la bonne workingarea
un qui me reduit ma fenettre a la mauvaise workingarea
A la suite de ca ma form n'a pas bougé

Pourquoi??

3)sur WndProc je log ca dans la console :
System.Console.WriteLine("1:" + Screen.AllScreens[0].WorkingArea.Height.ToString());
System.Console.WriteLine("2:" + SystemInformation.WorkingArea.Height.ToString());

On a pas la même chose :
WorkingArea de SystemInformation évolue selon l'évolution de la barre des taches
WorkingArea de Screen reste pareil
Pourquoi??
Comment faire pour obtenir avec systemInformation la workingarea d'autres ecrans??

4) le code

Code :

<LI>using System;
<LI>using System.Drawing;
<LI>using System.Collections;
<LI>using System.ComponentModel;
<LI>using System.Windows.Forms;
<LI>using System.Data;
<LI>
<LI>namespace WindowsApplication1
<LI>{
<LI> /// <summary>
<LI> /// Description résumée de Form1.
<LI> /// </summary>
<LI> public class Form1 : System.Windows.Forms.Form
<LI> {
<LI> /// <summary>
<LI> /// Variable nécessaire au concepteur.
<LI> /// </summary>
<LI> private System.ComponentModel.Container components = null;
<LI>
<LI> public Form1()
<LI> {
<LI> //
<LI> // Requis pour la prise en charge du Concepteur Windows Forms
<LI> //
<LI> InitializeComponent();
<LI>
<LI> //
<LI> // TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
<LI> //
<LI> }
<LI>
<LI> /// <summary>
<LI> /// Nettoyage des ressources utilisées.
<LI> /// </summary>
<LI> protected override void Dispose( bool disposing )
<LI> {
<LI> if( disposing )
<LI> {
<LI> if (components != null)
<LI> {
<LI> components.Dispose();
<LI> }
<LI> }
<LI> base.Dispose( disposing );
<LI> }
<LI>
<LI> #region Code généré par le Concepteur Windows Form
<LI> /// <summary>
<LI> /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
<LI> /// le contenu de cette méthode avec l'éditeur de code.
<LI> /// </summary>
<LI> private void InitializeComponent()
<LI> {
<LI> //
<LI> // Form1
<LI> //
<LI> this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
<LI> this.ClientSize = new System.Drawing.Size(328, 285);
<LI> this.Name = "Form1";
<LI> this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
<LI> this.Text = "Form1";
<LI> }
<LI> #endregion
<LI>
<LI> /// <summary>
<LI> /// Point d'entrée principal de l'application.
<LI> /// </summary>
<LI> [STAThread]
<LI> static void Main()
<LI> {
<LI> Application.Run(new Form1());
<LI> }
<LI>
<LI>
<LI> protected override void WndProc(ref Message msg)
<LI> {
<LI> const int WM_SIZE=5;
<LI> const int WM_WININICHANGE=26;
<LI> const int WM_WINDOWPOSCHANGED=71;
<LI> const int WM_WINDOWPOSCHANGING=70;
<LI> const int WM_GETMINMAXINFO=36;
<LI> const int WM_MOVE =3;
<LI> //const int WM_ERASEBKGND=20;
<LI> //const int WM_NCCALCSIZE=131;
<LI> /*switch(msg.Msg)
<LI> {
<LI> //case WM_SIZE:
<LI> //case WM_ENTERSIZEMOVE:
<LI> //case WM_SIZING:
<LI> //case WM_WININICHANGE:
<LI> //case WM_WINDOWPOSCHANGED:
<LI> case WM_WINDOWPOSCHANGED:
<LI> return;
<LI> } */
<LI> // call the base class WndProc for default message handling
<LI> System.Console.WriteLine("1:" + Screen.AllScreens[0].WorkingArea.Height.ToString());
<LI> System.Console.WriteLine("2:" + SystemInformation.WorkingArea.Height.ToString());
<LI> System.Console.WriteLine(msg.Msg);
<LI> base.WndProc(ref msg);
<LI> }
<LI> }
<LI>}</LI>

Merci pour tout l'aide que vous pourrez m'apporter

2 réponses

Messages postés
108
Date d'inscription
vendredi 11 juillet 2003
Statut
Membre
Dernière intervention
27 novembre 2007

As-tu essayé d'utiliser la propriété statique "Screen.AllScreens" puis
consulter la propriété WorkingArea de chacun des Screen du tableau ?

-- AOGie --
Messages postés
7
Date d'inscription
mardi 11 novembre 2003
Statut
Membre
Dernière intervention
29 juin 2005

AllScreens n'évolue pas dynamiquement en fonction du déplacé de la barre des tâches