私は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
イベントを発生させることができます。