c# events sur barre de titre

c# events sur barre de titre - C#/.NET managed - Programmation

Marsh Posté le 31-05-2006 à 14:33:33    

Salut,
 
Je cherches désesperement la possibilité de récuperer des événements souris sur la barre de titre d'une MainForm. (la barre bleu en haut de chaque fenêtre windows).
 
Est-ce possible ?
 
Mon problème est que je peux exécuter une action quand je commence à déplacer une fenêtre
et une autre quand j'arrête de la déplacer (quand j'ai relaché le bouton de la souris).
 
Il y a bien les évenements Move et LocationChanged, mais j'en reçois beaucoup trop...
 
Merci d'avance
 
Alex

Reply

Marsh Posté le 31-05-2006 à 14:33:33   

Reply

Marsh Posté le 01-06-2006 à 17:16:53    

Le plus simple c'est LocationChanged.
 
Tu créé un timer qui décrémente de 10 à 1 tous les 50ms, et quand il arrive à zéro, tu considère que la fenêtre a cessé de bouger.
Quand LocationChanged se produit :
- si le timer est nul, tu le créé et tu mets le compteur à 10
- si le timer n'est pas nul, tu mets seulement le compteur à 10
- quand le timer arrive à zéro, penser à le détruire correctement

Code :
  1. // le timer
  2. Timer _timer = null;
  3. // le compteur
  4. int _counter = -1;
  5. protected override void OnLocationChanged(EventArgs e)
  6. {
  7. base.OnLocationChanged (e);
  8. // si le timer n'est pas encore créé
  9. if(this._timer == null)
  10. {
  11.  // créer le timer sur 50 ms
  12.  this._timer = new Timer();
  13.  this._timer.Interval = 50;
  14.  this._timer.Tick += new EventHandler(_timer_Tick);
  15.  this._timer.Start();
  16. }
  17. // met le compteur à 10
  18. this._counter = 10;
  19. }
  20. private void _timer_Tick(object sender, EventArgs e)
  21. {
  22. // decrémente l compteur
  23. this._counter--;
  24. // si le déplacement est arrivé à expiration
  25. if(this._counter <= 0)
  26. {
  27.  // on détruit proprement le timer
  28.  this._timer.Stop();
  29.  this._timer.Dispose();
  30.  this._timer = null;
  31.  // et on fait l'appel qui convient
  32.  this.OnWindowStoppedMoving();
  33. }
  34. }

Si ca ne te convient pas (y'a pas la détection du MouseUp), y'a aussi une solution en jouant avec la WndProc, mais elle ne marchera pas correctement avec les thèmes de Windows XP.
 
Normallement, on n'est pas sensés toucher aux barres qui entourent les fenêtres, c'est sont géré par le systeme d'exploitation. Si c'est une demande d'un client, tu peux lui refuser, ou bien refuser tout support là dessus.

Reply

Marsh Posté le 01-06-2006 à 18:03:32    

Merci pour ta réponse.
 
C'est ce que j'ai finit par faire. Je pensais que ce n'était pas très propre, mais si tu me proposes la même chose, c'est qu'il ne devait pas y avoir d'autres solutions.
 
En tout cas, ca marche, très bien.
 
Alexandre

Reply

Sujets relatifs:

Leave a Replay

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