2009-07-05 23 views
6

Para detectar rotación de la rueda del mouse en .NET/WinForms, puedo anular OnMouseWheel. Al hacer clic en se puede detectar anulando OnMouseDown (es solo el botón Middle). ¿Pero cómo detecto inclinando de la rueda (inclinación hacia la izquierda/derecha para desplazamiento horizontal)? No se llama a OnMouseWheel, no a OnMouseDown cuando inclino la rueda del mouse.¿Cómo detectar la inclinación de la rueda del mouse?

+0

La solución de Marc funciona bien. ¡Gracias! – CarstenK

Respuesta

11

Cubierto here; en resumen, es necesario para manejar el mensaje ventanas manualmente (por lo que no se realiza directamente en NET - es el código del artículo enlazado):

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

Esto funciona bien cuando su ventana tiene una barra de desplazamiento horizontal, pero no de otra manera. Solo una nota para personas (como yo 8-) que podrían querer abusar de los botones de inclinación para algo más que el desplazamiento horizontal. – RichieHindle

+0

No estoy recibiendo ningún mensaje para mi aplicación al inclinar la rueda del mouse, pero sí otras aplicaciones. ¿Alguna sugerencia? – ChrisF

+0

He publicado esto como una nueva pregunta aquí - http://stackoverflow.com/questions/1092500/why-isnt-my-app-getting-mouse-wheel-tilt-messages – ChrisF

Cuestiones relacionadas