FR | EN
Page générée en 0.16 sec
Imprimer

Gestion de la souris

La gestion de la souris s'avère légèrement plus complexe. Nous utiliserons ici les événement de la souris pour récupérer les déplacements de celle-ci. Voici les différentes étapes :

  • Instanciation de l'objet Device au format de la souris
  • Définition des paramètres de comportement de la souris (Cooperative Level)
  • Initialisation de la notification d'événements
  • Acquisition de l'accès à la souris
  • Récupération des déplacements de la souris

1. Instanciation de l'objet Device au format de la souris

Comme pour le clavier, on déclare et instancie une variable de type Device. On passe comme paramètre le type du device : SystemGuid.Mouse

Device _deviceSouris = new Device(SystemGuid.Mouse);

2. Définition des paramètres de comportement de la souris (Cooperative Level)

Les niveaux de coopérativité sont les mêmes que le clavier : Exclusive / NonExclusive et Foreground / Background :

CooperativeLevelFlags _coopLevel;
_coopLevel = CooperativeLevelFlags.Exclusive;
_coopLevel |= CooperativeLevelFlags.Foreground;

On applique ensuite ces paramètres au device à l'aide de la méthode SetCooperativeLevel() prenant en paramètre la Form utilisée par l'application et le CooperativeLevel :

_deviceSouris.SetCooperativeLevel(this, _coopLevel);

3. Initialisation de la notification d'événements

La souris étant gérée de manière événementielle, il faut initialiser la notification d'événements. Pour cela, nous devons dans un premier temps ajouter trois propriétés :

private Thread _threadSouris = null;
private AutoResetEvent _threadEvenementSouris = null;
private delegate void _recupereEtatSouris();

_threadSouris est un thread qui va éxecuter parallèlement EvenementSouris() (expliqué ci-dessous)
_threadEvenementSouris est une variable qui va nous permettre d'initialiser la notification d'événement du device
_recupereEtatSouris() est une fonction de délégation qui va exécuter parallèlement VerifieEtatSouris() permettant de vérifier l'état de la souris (expliqué au chapitre 3.5).

Au niveau de l'initialisation du device, nous pouvons maintenant lancer le thread et initialiser la notification d'événements :

this._threadSouris = new Thread(new ThreadStart(this.EvenementSouris));
this._threadSouris.Start();

this._threadEvenementSouris = new AutoResetEvent(false);
this._deviceSouris.SetEventNotification(this._threadEvenementSouris);

Nous allons créer la fonction d'événement. Celle-ci va s'exécuter tant que votre form existe, mettra à jour les informations du device grâce à la methode Pool() et lancera la vérification de l'état de la souris :

private void EvenementSouris()
{
	while(this.Created)
	{
		this._threadEvenementSouris .WaitOne(-1, false);
try { // On met à jour les informations du device this._deviceSouris.Poll(); } catch(InputException) { continue; } this.BeginInvoke(new this._recupereEtatSouris(this.VerifieEtatSouris)); } }

4. Acquisition de l'accès à la souris

On obtient l'accès au device grâce à la méthode Acquire(). Suivant les CooperativeLevel que vous avez sélectionnés, si la fenêtre perd le focus l'acquisition peut être perdue.

_deviceSouris.Acquire();

5. Récupération des déplacements de la souris

Nous allons voir ici la fonction VerifieEtatSouris() exécutée par la fonction de délégation précédement déclarée.

Il faut dans un premier temps récupérer l'état de la souris à l'aide de la méthode GetCurrentMouseState().

MouseState EtatSouris = _deviceSouris.GetCurrentMouseState();

Nous pouvons ensuite accéder aux propriétés et méthodes de la souris :

EtatSouris.X // Renvoie un entier correspondant au déplacement horizontal
EtatSouris.Y // Renvoie un entier correspondant au déplacement vertical
EtatSouris.GetMouseButtons() // Renvoie un tableau de byte de l'état des boutons (0 inactif, 1 appuyé)

   X et Y ne correspondent pas aux coordonnées mais bien aux déplacements de la souris à partir du point en haut à gauche de l'écran. Exemple : X = 100, Y = -100 : la souris se déplace en haut à droite.

W3C - XHTML 1.0 Powered By Fedora W3C - CSS