Поделиться через


сообщение WM_GESTURE

Передает сведения о жесте.

Параметры

wParam

Предоставляет сведения, идентифицирующие команду жеста и значения аргументов для конкретного жеста. Это те же сведения, которые передаются в элементе ullArguments структуры GESTUREINFO .

lParam

Предоставляет дескриптор сведений, идентифицирующие команду жеста и значения аргументов для конкретного жеста. Эти сведения извлекаются путем вызова GetGestureInfo.

Возвращаемое значение

Если приложение обрабатывает это сообщение, оно должно вернуть значение 0.

Если приложение не обрабатывает сообщение, оно должно вызвать DefWindowProc. Это приведет к утечке памяти в приложении, так как дескриптор сенсорного ввода не будет закрыт, а связанная память процесса не будет освобождена.

Комментарии

В следующей таблице перечислены поддерживаемые команды жестов.

Идентификатор жеста Value (dwID) Описание
GID_BEGIN 1 Указывает, что начинается универсальный жест.
GID_END 2 Указывает конец универсального жеста.
GID_ZOOM 3 Указывает начало масштабирования, перемещение или остановку масштабирования. Первое сообщение команды GID_ZOOM начинает масштабирование, но не приводит к увеличению масштаба. Вторая команда GID_ZOOM активирует масштабирование относительно состояния, содержащегося в первом GID_ZOOM.
GID_PAN 4 Указывает перемещение или начало сдвига сдвига. Первая команда GID_PAN указывает на начало сдвига, но не выполняет сдвиг. Со вторым сообщением команды GID_PAN приложение начнет сдвиг.
GID_ROTATE 5 Указывает на поворот перемещения или поворот начала. Первое сообщение команды GID_ROTATE указывает на поворот или начало поворота, но не будет вращаться. Второе сообщение команды GID_ROTATE активирует операцию поворота относительно состояния, содержащегося в первом GID_ROTATE.
GID_TWOFINGERTAP 6 Указывает жест касания двумя пальцами.
GID_PRESSANDTAP 7 Указывает жест нажатия и касания.

Примечание

Чтобы включить поддержку устаревших версий, сообщения с GID_BEGIN и GID_END командами жестов должны пересылаться с помощью DefWindowProc.

В следующей таблице указаны аргументы жестов, переданные в параметрах lParam и wParam .

Идентификатор жеста жесты ullArgument ptsLocation в структуре GestureInfo
GID_ZOOM Увеличение или уменьшение масштаба Указывает расстояние между двумя точками. Указывает центр масштаба.
GID_PAN Сдвиг Указывает расстояние между двумя точками. Указывает текущее положение сдвига.
GID_ROTATE Поворот (сводка) Указывает угол поворота, если установлен флаг GF_BEGIN . В противном случае это изменение угла с момента начала поворота. Этот элемент со знаком указывает направление поворота. Используйте макросы GID_ROTATE_ANGLE_FROM_ARGUMENT и GID_ROTATE_ANGLE_TO_ARGUMENT , чтобы получить и задать значение угла. Это указывает центр поворота, который является неподвижной точкой, вокруг которой вращается целевой объект.
GID_TWOFINGERTAP Касание двумя пальцами Указывает расстояние между двумя пальцами. Указывает центр двух пальцев.
GID_PRESSANDTAP Нажатие и касание Указывает разницу между первым и вторым пальцами. Это значение хранится в нижних 32 битах объекта ullArgument в структуре POINT . Указывает положение, на которое спускается первый палец.

Примечание

Все расстояния и позиции указаны в физических координатах экрана.

Примечание

Параметры dwID и ullArgument следует рассматривать только как сопутствующие команды GID_* и не должны изменяться приложениями.

Примеры

В следующем коде показано, как получить сведения о жестах, связанные с этим сообщением.

Примечание

Вы всегда должны пересылать необработанных сообщений в DefWindowProc и закрывать дескриптор ввода жестов для сообщений, которые обрабатываются с помощью вызова CloseGestureInfoHandle. В этом примере поведение обработчика жестов по умолчанию будет подавлено, так как дескриптор TOUCHINPUT закрыт в каждом из вариантов жестов. Если вы удалили варианты в приведенном выше коде для необработанных сообщений, обработчик жестов по умолчанию будет обрабатывать сообщения путем перенаправления в DefWindowProc в случае по умолчанию.

  LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    // Create a structure to populate and retrieve the extra message info.
    GESTUREINFO gi;  
    
    ZeroMemory(&gi, sizeof(GESTUREINFO));
    
    gi.cbSize = sizeof(GESTUREINFO);

    BOOL bResult  = GetGestureInfo((HGESTUREINFO)lParam, &gi);
    BOOL bHandled = FALSE;

    if (bResult){
        // now interpret the gesture
        switch (gi.dwID){
           case GID_ZOOM:
               // Code for zooming goes here     
               bHandled = TRUE;
               break;
           case GID_PAN:
               // Code for panning goes here
               bHandled = TRUE;
               break;
           case GID_ROTATE:
               // Code for rotation goes here
               bHandled = TRUE;
               break;
           case GID_TWOFINGERTAP:
               // Code for two-finger tap goes here
               bHandled = TRUE;
               break;
           case GID_PRESSANDTAP:
               // Code for roll over goes here
               bHandled = TRUE;
               break;
           default:
               // A gesture was not recognized
               break;
        }
    }else{
        DWORD dwErr = GetLastError();
        if (dwErr > 0){
            //MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
        }
    }
    if (bHandled){
        return 0;
    }else{
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
  }

Требования

Требование Значение
Минимальная версия клиента
Windows 7 [только классические приложения]
Минимальная версия сервера
Windows Server 2008 R2 [только классические приложения]
Заголовок
Winuser.h (включая Windows.h)

См. также раздел

Уведомления

Руководство по программированию сенсорных жестов Windows