該操作系統是在視網膜Macbook PRO上的Windows 8。WPF - 兩個手指在Macbook pro觸控板上水平滾動
我需要支持垂直滾動使用觸控板和水平滾動在我的應用程序。
我想移動WPF滾動查看器的位置基於兩個手指輕掃上下(垂直滾動)和左 - 右(水平滾動)。
據我所見,觸控板上的垂直滾動被轉換爲框架中的鼠標滾輪事件。但是,我發現無法識別鼠標滾輪事件是否爲水平滾動。
我應該在WPF中處理什麼事件才能實現?
該操作系統是在視網膜Macbook PRO上的Windows 8。WPF - 兩個手指在Macbook pro觸控板上水平滾動
我需要支持垂直滾動使用觸控板和水平滾動在我的應用程序。
我想移動WPF滾動查看器的位置基於兩個手指輕掃上下(垂直滾動)和左 - 右(水平滾動)。
據我所見,觸控板上的垂直滾動被轉換爲框架中的鼠標滾輪事件。但是,我發現無法識別鼠標滾輪事件是否爲水平滾動。
我應該在WPF中處理什麼事件才能實現?
我寫了一篇文章,特別爲您瞭解如何在WPF應用程序中處理觸控板的水平滾動。也就是說Support Horizontal Scrolling of TouchPad in WPF Application - walterlv
我們需要從我們的WPF窗口取WM_MOUSEHWHEEL
消息。是!那個鼠標滾輪消息。我們之前從中獲取垂直數據,但我們現在從中獲取水平數據。
首先,我們應該掛鉤窗口消息。
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
方法編寫水平滾動代碼。
更好的是,您可以將上述所有代碼打包到更常見的類中,並提高MouseTilt
事件,就像提高MouseWheel
事件一樣。