2009-07-05 15 views
6

Aby wykryć obrót kółka myszy w .NET/WinForms, mogę przesłonić OnMouseWheel. Kliknięcie może zostać wykryte przez przesłonięcie OnMouseDown (jest to po prostu przycisk Middle). Ale jak wykryć przechylenie koła (przechylenie w lewo/w prawo w celu przewijania w poziomie)? Ani OnMouseWheel, ani OnMouseDown nie jest wywoływana, gdy przechylam kółko myszy.Jak wykryć pochylenie kółka myszy?

+0

Rozwiązanie Marca działa dobrze. Dziękuję Ci! – CarstenK

Odpowiedz

11

objęty here; Krótko mówiąc, trzeba ręcznie obsługiwać wiadomość Windows (na to nie jest obsługiwany bezpośrednio w .NET - kod jest powiązany z artykułu):

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

Działa to dobrze, gdy okno ma poziomy pasek przewijania, ale nie może być inaczej. Tylko uwaga dla ludzi (jak ja 8-), którzy mogą chcieć nadużywać przycisków pochylenia do czegoś innego niż poziome przewijanie. – RichieHindle

+0

Nie dostaję żadnych wiadomości do mojej aplikacji od przechylenia kółka myszy, ale inne aplikacje są. Jakieś sugestie? – ChrisF

+0

Opublikowałem to jako nowe pytanie tutaj - http://stackoverflow.com/questions/1092500/why-isnt-my-app-getting-mouse-wheel-tilt-messages – ChrisF

Powiązane problemy