2014-01-15 20 views
5

OSはRetina Macbook PROのWindows 8です。WPF - Macbookプロトラックパッドの2本の指の水平スクロール

トラックパッドを使った垂直スクロールと私のアプリケーションでの水平スクロールの両方をサポートする必要があります。

2本の指のスワイプ(垂直スクロール)と左右(水平スクロール)に基づいてWPFスクロールビューワの位置を移動したいとします。

私が見る限り、トラックパッドの垂直スクロールは、フレームワークのマウスホイールイベントに変換されます。しかし、私は、マウスのホイールイベントが水平スクロールであるかどうかを認識する方法は見つけられませんでした。

これを実装するには、どのイベントをWPFで処理する必要がありますか?

答えて

0

私はWPFアプリケーションでタッチパッドの水平スクロールを処理する方法を知っている記事を書いています。それは私たちが私たちのWPFウィンドウからWM_MOUSEHWHEELメッセージをフェッチする必要がSupport Horizontal Scrolling of TouchPad in WPF Application - walterlv


です。はい!そのマウスホイールメッセージ。以前は垂直データを取得していましたが、水平データを取得しています。

まず、ウィンドウメッセージをフックする必要があります。

protected override void OnSourceInitialized(EventArgs e) 
{ 
    var source = PresentationSource.FromVisual(_board); 
    ((HwndSource) source)?.AddHook(Hook); 
} 

private IntPtr Hook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
    // Handle window message here. 
    return IntPtr.Zero; 
} 

次に、WM_MOUSEHWHEELを扱う:

const int WM_MOUSEHWHEEL = 0x020E; 

private IntPtr Hook(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) 
{ 
    switch (msg) 
    { 
     case WM_MOUSEHWHEEL: 
      int tilt = (short) HIWORD(wParam); 
      OnMouseTilt(tilt); 
      return (IntPtr) 1; 
    } 
    return IntPtr.Zero; 
} 

/// <summary> 
/// Gets high bits values of the pointer. 
/// </summary> 
private static int HIWORD(IntPtr ptr) 
{ 
    var val32 = ptr.ToInt32(); 
    return ((val32 >> 16) & 0xFFFF); 
} 

/// <summary> 
/// Gets low bits values of the pointer. 
/// </summary> 
private static int LOWORD(IntPtr ptr) 
{ 
    var val32 = ptr.ToInt32(); 
    return (val32 & 0xFFFF); 
} 

private void OnMouseTilt(int tilt) 
{ 
    // Write your horizontal handling codes here. 
} 

あなたはOnMouseTilt方法で横スクロールのコードを書くことができます。

もっと一般的なクラスにすべてのコードをパックして、MouseWheelイベントを発生させるのと同じようにMouseTiltイベントを発生させることができます。

関連する問題