English 中文(简体)
Handle tilt left / right in WPF
原标题:
最佳回答

I figured out how to implement WndProc in WPF UserControl. UserControl must obtain a window pointer like by AppendWindow method in my example:

private static MyUserControl instanceWithFocus;

public void AppendWindow(Window window) {
    HwndSource source = HwndSource.FromHwnd(new WindowInteropHelper(window).Handle);
    source.AddHook(new HwndSourceHook(WndProc));
}

private static IntPtr WndProc(IntPtr hwnd, int msg, IntPtr wParam, IntPtr lParam, ref bool handled) {
    switch (msg) {
        case Win32Messages.WM_MOUSEHWHEEL:
            MouseWheelTilt(wParam, lParam);
            handled = true;
            break;
        default:
            break;
    }
    return IntPtr.Zero;
}

private static void MouseWheelTilt(IntPtr wParam, IntPtr lParam) {
    Int32 tilt = (Int16)Utils.HIWORD(wParam);
    Int32 keys = Utils.LOWORD(wParam);
    Int32 x = Utils.LOWORD(lParam);
    Int32 y = Utils.HIWORD(lParam);

    // call an event on active instance of this object
    if (instanceWithFocus != null) {
        instanceWithFocus.MouseWheelTilt(tilt, keys, x, y);
    }
}

private void MouseWheelTilt(Int32 tilt, Int32 keys, Int32 x, Int32 y) {
    scrollViewer.ScrollToHorizontalOffset(scrollViewer.HorizontalOffset + tilt);
}

private void UserControl_MouseEnter(object sender, MouseEventArgs e) {
    instanceWithFocus = this;
}

private void UserControl_MouseLeave(object sender, MouseEventArgs e) {
    instanceWithFocus = null;
}

abstract class Win32Messages {
    public const int WM_MOUSEHWHEEL = 0x020E;
}

abstract class Utils {

    internal static Int32 HIWORD(IntPtr ptr) {
        Int32 val32 = ptr.ToInt32();
        return ((val32 >> 16) & 0xFFFF);
    }

    internal static Int32 LOWORD(IntPtr ptr) {
        Int32 val32 = ptr.ToInt32();
        return (val32 & 0xFFFF);
    }

}
问题回答

暂无回答




相关问题
WPF convert 2d mouse click into 3d space

I have several geometry meshes in my Viewport3D, these have bounds of (w:1800, h:500, d:25). When a user clicks in the middle of the mesh, I want the Point3D of (900, 500, 25)... How can I achieve ...

Editing a xaml icons or images

Is it possible to edit a xaml icons or images in the expression design or using other tools? Is it possible to import a xaml images (that e.g you have exported) in the expression designer for editing?...

WPF: writing smoke tests using ViewModels

I am considering to write smoke tests for our WPF application. The question that I am faced is: should we use UI automation( or some other technology that creates a UI script), or is it good enough to ...

WPF - MVVM - NHibernate Validation

Im facing a bit of an issue when trying to validate a decimal property on domain object which is bound to a textbox on the view through the viewmodel. I am using NHibernate to decorate my property on ...

How do WPF Markup Extensions raise compile errors?

Certain markup extensions raise compile errors. For example StaticExtension (x:Static) raises a compile error if the referenced class cannot be found. Anyone know the mechanism for this? Is it baked ...

WPF design-time context menu

I am trying to create a custom wpf control, I m wondering how I can add some design-time features. I ve googled and can t seem to get to my goal. So here s my simple question, how can I add an entry ...

How to combine DataTrigger and EventTrigger?

NOTE I have asked the related question (with an accepted answer): How to combine DataTrigger and Trigger? I think I need to combine an EventTrigger and a DataTrigger to achieve what I m after: when ...

热门标签