调用SetGestureConfig方法会影响onmousemove控件的覆盖

时间:2018-11-13 05:14:20

标签: c# winforms onmousemove

要处理诸如捏合之类的触摸手势,我在控件中可用的SetGestureConfig覆盖方法中调用了WndProc方法。

我想仅将此方法用于捏手势而不是GC_ALLGESTURES。

这是代码

            switch (m.Msg)
            {
                case WM_GESTURENOTIFY:
                    {
                    GESTURECONFIG gc = new GESTURECONFIG();
                    gc.dwID = 0;
                    gc.dwWant = GC_ALLGESTURES;
                    gc.dwBlock = 0;

                    bool result = SetGestureConfig(
                        handle,
                        0,
                        1,
                        ref gc,
                        _gestureConfigSize
                    );

                    if (!result)
                    {
                        throw new Exception("Error in execution of SetGestureConfig");
                    }
                }
                break;
                //... other codes if any
            }

在使用此代码之前,当我在控件上触摸并移动手指时,将调用控件的OnMouseMove覆盖方法。但是使用此代码后,情况并非如此。

我正在分别处理与手势相关的功能,如捏,平移等,并且运行良好。

仅在捏手势后才可以进行平移。如果在控件上执行了捏手势,则应在触摸移动时执行平移。如果未在控件上执行捏合手势,那么我希望在触摸移动期间触发默认的鼠标移动事件

但是调用SetGestureConfig方法不会触发默认的鼠标移动事件。

是否应该在不捏手的平移手势期间手动调用OnMouseMove?还是应该对SetGestureConfig方法进行任何修改,以避免在平移手势期间阻塞OnMouseMove

1 个答案:

答案 0 :(得分:1)

看起来我们可以控制我们想听的手势。 https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-setgestureconfig

的参考备注部分

在上面的代码中,我只需要进行以下更改以仅监听捏合手势和平移(仅在执行捏合之后)。更改通过评论进行解释

            switch (m.Msg)
            {
                case WM_GESTURENOTIFY:
                    {
                    GESTURECONFIG gc = new GESTURECONFIG();

                    //Listen to required gestures here
                    //If 0, all gestures like pinching, panning, etc will be listened
                    //If GID_ZOOM, only pinching gesture will be listened
                    gc.dwID = IsPinchingPerformed ? 0 : GID_ZOOM;


                    gc.dwWant = GC_ALLGESTURES;
                    gc.dwBlock = 0;

                    bool result = SetGestureConfig(
                        handle,
                        0,
                        1,
                        ref gc,
                        _gestureConfigSize
                    );

                }
                break;

                //... other codes if any
}