2009-07-05 26 views
6

Pour détecter rotation de la molette de la souris dans .NET/WinForms, je peux remplacer OnMouseWheel. En cliquant sur peut être détecté en remplaçant OnMouseDown (il s'agit simplement du bouton Middle). Mais comment puis-je détecter inclinaison de la roue (inclinaison vers la gauche/droite pour le défilement horizontal)? Ni OnMouseWheel, ni OnMouseDown est appelé lorsque je incline la molette de la souris.Comment détecter l'inclinaison de la molette de la souris?

+0

La solution de Marc fonctionne bien. Je vous remercie! – CarstenK

Répondre

11

Recouvert here; bref, vous devez gérer le message Windows manuellement (à n'est pas traitée directement dans .NET - est le code de l'article lié):

protected override void WndProc(ref Message m) 
    { 
     base.WndProc(ref m); 
     if (m.HWnd != this.Handle) 
     { 
      return; 
     } 
     switch (m.Msg) 
     { 
      case Win32Messages.WM_MOUSEHWHEEL: 
       FireMouseHWheel(m.WParam, m.LParam); 
       m.Result = (IntPtr)1; 
       break; 
      default: 
       break; 
     } 
    } 
    ... 
    abstract class Win32Messages 
    { 
     public const int WM_MOUSEHWHEEL = 0x020E;//discovered via Spy++ 
    } 
+2

Cela fonctionne correctement lorsque votre fenêtre a une barre de défilement horizontale, mais pas autrement. Juste une note pour les personnes (comme moi 8-) qui pourraient vouloir abuser des boutons d'inclinaison pour quelque chose d'autre que le défilement horizontal. – RichieHindle

+0

Je ne reçois aucun message de mon application en inclinant la molette de la souris, mais d'autres applications le sont. Aucune suggestion? – ChrisF

+0

J'ai posté cela comme une nouvelle question ici - http://stackoverflow.com/questions/1092500/why-isnt-my-app-getting-mouse-wheel-tilt-messages – ChrisF

Questions connexes