2009-07-05 106 views
6

要在.NET/WinForms中檢測到鼠標滾輪的輪轉,我可以覆蓋OnMouseWheel點擊可以通過覆蓋OnMouseDown來檢測(它只是Middle按鈕)。但是,如何檢測輪子的傾斜(水平滾動時左右傾斜)?當我傾斜鼠標滾輪時,正在調用OnMouseWheel而不是OnMouseDown如何檢測鼠標滾輪傾斜?

+0

Marc的解決方案工作正常。謝謝! – CarstenK 2009-07-05 08:55:30

回答

11

覆蓋here;總之,你需要手動處理Windows消息(它不是在.NET直接處理 - 代碼是從鏈接的文章):

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

當你的窗口有一個水平滾動條時,這可以正常工作,但不是這樣。對於那些可能想要濫用水平滾動以外的其他功能的人(如我8),請注意。 – RichieHindle 2009-07-05 10:10:40