2014-01-15 5 views
5

OS는 Retina Macbook PRO의 Windows 8입니다.WPF - MacBook Pro 트랙 패드에서 두 손가락 수평 스크롤

내 앱에서 트랙 패드를 사용한 세로 스크롤과 가로 스크롤을 모두 지원해야합니다.

두 손가락으로 위 아래로 스크롤 (세로 스크롤) 및 왼쪽에서 오른쪽으로 스크롤 (가로 스크롤)하여 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 이벤트를 발생시킬 수 있습니다.