Open utterances-bot opened 2 years ago
Thanks! My horizontal scroll bar control:
private void OnMouseTilt(int tilt)
{
UIElement element = Mouse.DirectlyOver as UIElement;
if (element == null) return;
ScrollViewer scrollViewer = element is ScrollViewer viewer ? viewer : FindParent<ScrollViewer>(element);
if (scrollViewer == null)
return;
scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + tilt);
}
public static T FindParent<T>(DependencyObject child) where T : DependencyObject
{
DependencyObject parentObject = VisualTreeHelper.GetParent(child);
if (parentObject == null) return null;
T parent = parentObject as T;
if (parent != null)
return parent;
else
return FindParent<T>(parentObject);
}
Hahaha, that's great!
您好,我前面发现HIWORD中的.ToInt32在左滑的时候会算术溢出。我查了Win32API的文档,发现官方说应该用GET_WHEEL_DELTA_WPARAM来获取Delta。
您好,我前面发现HIWORD中的.ToInt32在左滑的时候会算术溢出。我查了Win32API的文档,发现官方说应该用GET_WHEEL_DELTA_WPARAM来获取Delta。
@JeffersonQin 感谢,我修一下
@walterlv 我前面又看了下官方的macro实现发现和您的写法一样,所以感觉和GET_WHEEL_DELTA_WPARAM没关系,好像是wParam的位数问题。可能要判断是32位还是64位系统,然后用.ToInt32和.ToInt64分别做。
@walterlv 然后int转short的时候貌似需要unchecked context
/// <summary>
/// 取指针所在高位数值。
/// </summary>
private static int HIWORD(IntPtr ptr)
{
unchecked
{
if (Environment.Is64BitOperatingSystem)
{
var val64 = ptr.ToInt64();
return (short) ((val64 >> 16) & 0xFFFF);
}
var val32 = ptr.ToInt32();
return (short) ((val32 >> 16) & 0xFFFF);
}
}
/// <summary>
/// 取指针所在低位数值。
/// </summary>
private static int LOWORD(IntPtr ptr)
{
unchecked
{
if (Environment.Is64BitOperatingSystem)
{
var val64 = ptr.ToInt64();
return (short)(val64 & 0xFFFF);
}
var val32 = ptr.ToInt32();
return (short)(val32 & 0xFFFF);
}
}
这样就可以了。
Support Horizontal Scrolling of TouchPad in WPF Application - walterlv
Support Horizontal Scrolling of TouchPad in WPF Application
https://blog.walterlv.com/post/handle-horizontal-scrolling-of-touchpad-en.html