Вызов метода SetGestureConfig влияет на переопределение элемента управления onmousemove - PullRequest
0 голосов
/ 13 ноября 2018

Для обработки сенсорных жестов, таких как сжатие, я вызываю метод 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 голосов
/ 13 ноября 2018

Похоже, мы можем контролировать жест, который хотим слушать.Раздел «Отмеченные замечания» 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
}
...