[C#] Form Maximized et TaskBar

Form Maximized et TaskBar [C#] - C#/.NET managed - Programmation

Marsh Posté le 29-06-2005 à 10:02:04    

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 :
  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. namespace WindowsApplication1
  8. {
  9. /// <summary>
  10. /// Description résumée de Form1.
  11. /// </summary>
  12. public class Form1 : System.Windows.Forms.Form
  13. {
  14.  /// <summary>
  15.  /// Variable nécessaire au concepteur.
  16.  /// </summary>
  17.  private System.ComponentModel.Container components = null;
  18.  public Form1()
  19.  {
  20.   //
  21.   // Requis pour la prise en charge du Concepteur Windows Forms
  22.   //
  23.   InitializeComponent();
  24.   //
  25.   // TODO : ajoutez le code du constructeur après l'appel à InitializeComponent
  26.   //
  27.  }
  28.  /// <summary>
  29.  /// Nettoyage des ressources utilisées.
  30.  /// </summary>
  31.  protected override void Dispose( bool disposing )
  32.  {
  33.   if( disposing )
  34.   {
  35.    if (components != null)
  36.    {
  37.     components.Dispose();
  38.    }
  39.   }
  40.   base.Dispose( disposing );
  41.  }
  42.  #region Code généré par le Concepteur Windows Form
  43.  /// <summary>
  44.  /// Méthode requise pour la prise en charge du concepteur - ne modifiez pas
  45.  /// le contenu de cette méthode avec l'éditeur de code.
  46.  /// </summary>
  47.  private void InitializeComponent()
  48.  {
  49.   //  
  50.   // Form1
  51.   //  
  52.   this.AutoScaleBaseSize = new System.Drawing.Size(5, 13);
  53.   this.ClientSize = new System.Drawing.Size(328, 285);
  54.   this.Name = "Form1";
  55.   this.StartPosition = System.Windows.Forms.FormStartPosition.Manual;
  56.   this.Text = "Form1";
  57.  }
  58.  #endregion
  59.  /// <summary>
  60.  /// Point d'entrée principal de l'application.
  61.  /// </summary>
  62.  [STAThread]
  63.  static void Main()
  64.  {
  65.   Application.Run(new Form1());
  66.  }
  67.  protected override void WndProc(ref Message msg)
  68.  {
  69.   const int WM_SIZE=5;
  70.   const int WM_WININICHANGE=26;
  71.   const int WM_WINDOWPOSCHANGED=71;
  72.   const int WM_WINDOWPOSCHANGING=70;
  73.   const int WM_GETMINMAXINFO=36;
  74.   const int WM_MOVE =3;
  75.   //const int WM_ERASEBKGND=20;
  76.   //const int WM_NCCALCSIZE=131;
  77.   /*switch(msg.Msg)  
  78.   {  
  79.    //case WM_SIZE:
  80.    //case WM_ENTERSIZEMOVE:
  81.    //case WM_SIZING:
  82.    //case WM_WININICHANGE:
  83.    //case WM_WINDOWPOSCHANGED:
  84.    case WM_WINDOWPOSCHANGED:
  85.      return;
  86.   } */
  87.   // call the base class WndProc for default message handling
  88.   System.Console.WriteLine("1:" + Screen.AllScreens[0].WorkingArea.Height.ToString());
  89.   System.Console.WriteLine("2:" + SystemInformation.WorkingArea.Height.ToString());
  90.   System.Console.WriteLine(msg.Msg);
  91.   base.WndProc(ref msg);
  92.  }
  93. }
  94. }


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

Reply

Marsh Posté le 29-06-2005 à 10:02:04   

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed