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


Функция SetGestureConfig (winuser.h)

Настраивает сообщения, отправляемые из окна для жестов Windows Touch.

Синтаксис

BOOL SetGestureConfig(
  [in] HWND           hwnd,
  [in] DWORD          dwReserved,
  [in] UINT           cIDs,
  [in] PGESTURECONFIG pGestureConfig,
  [in] UINT           cbSize
);

Параметры

[in] hwnd

Дескриптор окна для настройки конфигурации жестов.

[in] dwReserved

Это значение зарезервировано и должно иметь значение 0.

[in] cIDs

Количество передаваемых структур конфигурации жестов.

[in] pGestureConfig

Массив структур конфигурации жестов, определяющих конфигурацию жестов.

[in] cbSize

Размер структуры конфигурации жестов (GESTURECONFIG).

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

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Чтобы получить расширенные сведения об ошибке, используйте функцию GetLastError .

Комментарии

Если вы не ожидаете изменять конфигурацию жестов, вызовите SetGestureConfig во время создания окна. Если вы хотите динамически изменять конфигурацию жестов, вызовите SetGestureConfig в ответ на WM_GESTURENOTIFY сообщения.

В следующей таблице показаны идентификаторы жестов, поддерживаемые элементом dwID структуры GESTURECONFIG . Обратите внимание, что параметр dwID в значение 0 означает, что установлены глобальные флаги конфигурации жестов.

Имя Значение Описание
GID_ZOOM 3 Параметры конфигурации для жеста масштабирования.
GID_PAN 4 Жест сдвига.
GID_ROTATE 5 Жест поворота.
GID_TWOFINGERTAP 6 Жест касания двумя пальцами.
GID_PRESSANDTAP 7 Жест нажатия и касания.
 

Следующие флаги используются, если dwID имеет нулевое значение.

Имя Значение Описание
GC_ALLGESTURES 0x00000001 Все жесты.
 

Следующие флаги используются, если параметру dwID присвоено значение GID_ZOOM.

Имя Значение Описание
GC_ZOOM 0x00000001 Жест масштабирования.
 

Следующие флаги используются, если для dwID задано значение GID_PAN.

Имя Значение Описание
GC_PAN 0x00000001 Все жесты сдвига.
GC_PAN_WITH_SINGLE_FINGER_VERTICALLY 0x00000002 Вертикальные сдвиги одним пальцем.
GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 0x00000004 Горизонтальные сдвиги одним пальцем.
GC_PAN_WITH_GUTTER 0x00000008 Сдвиг с границей желоба по краям области сдвига. Граница желоба ограничивает перпендикулярное движение в основном направлении до достижения порога для выхода из желоба.
GC_PAN_WITH_INTERTIA 0x00000010 Сдвиг с инерцией для плавного замедления при остановке жестов панорамирования.
 
Примечание Жесты сдвига можно использовать в сочетании друг с другом для управления поведением. Например, если задать для битов dwWant сдвиг с горизонтальным сдвигом одним пальцем, а для битов dwBlock — вертикальное, то сдвиг будет ограничен горизонтальными сдвигами. Изменение бита dwWant на и GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY удаление вертикального сдвига одним пальцем из бита dwBlock позволит включить как вертикальный, так и горизонтальный сдвиг.
 
Примечание По умолчанию для сдвига включена инерция.
 
Примечание Один вызов SetGestureConfig не может включать другие идентификаторы GID вместе с 0.
 
Следующие флаги используются, если параметру dwID присвоено значение GID_ROTATE.
Имя Значение Описание
GC_ROTATE 0x00000001 Жест поворота.
 

Следующие флаги используются, если параметру dwID присвоено значение GID_TWOFINGERTAP.

Имя Значение Описание
GC_TWOFINGERTAP 0x00000001 Жест касания двумя пальцами.
 

Следующие флаги используются, если dwID имеет значение GID_PRESSANDTAP.

Имя Значение Описание
GC_PRESSANDTAP 0x00000001 Жест нажатия и касания.
 
Примечание Вызов SetGestureConfig изменит конфигурацию жеста на время существования окна, а не только для следующего жеста.
 

Примеры

В следующем примере показано, как можно получить горизонтальное и вертикальное сдвиг одним пальцем без канавы и без инерции. Это типичная конфигурация для двухадрисового приложения навигации, например приложения Microsoft PixelSense Globe.

// set up our want / block settings
DWORD dwPanWant  = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
DWORD dwPanBlock = GC_PAN_WITH_GUTTER | GC_PAN_WITH_INERTIA;

// set the settings in the gesture configuration
GESTURECONFIG gc[] = {{ GID_ZOOM, GC_ZOOM, 0 },
                      { GID_ROTATE, GC_ROTATE, 0},
                      { GID_PAN, dwPanWant , dwPanBlock}                     
                     };    
                     
UINT uiGcs = 3;
BOOL bResult = SetGestureConfig(hWnd, 0, uiGcs, gc, sizeof(GESTURECONFIG));  

if (!bResult){                
    DWORD err = GetLastError();                                       
}

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

Примечание При управлении сдвигом одним пальцем необходимо явно задать все флаги, которые нужно включить или отключить.
 
// set up our want / block settings
DWORD dwPanWant  = GC_PAN | GC_PAN_WITH_SINGLE_FINGER_VERTICALLY;                    
DWORD dwPanBlock = GC_PAN_WITH_GUTTER;    

// set the settings in the gesture configuration
GESTURECONFIG gc[] = {{ GID_ZOOM, GC_ZOOM, 0 },
                      { GID_ROTATE, GC_ROTATE, 0},
                      { GID_PAN, dwPanWant , dwPanBlock}                     
                     };    
                     
UINT uiGcs = 3;
BOOL bResult = SetGestureConfig(hWnd, 0, uiGcs, gc, sizeof(GESTURECONFIG));  

if (!bResult){                
    DWORD err = GetLastError();                                       
}   

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

// set the settings in the gesture configuration
GESTURECONFIG gc[] = {0,0,GC_ALLGESTURES};
                     
UINT uiGcs = 1;
BOOL bResult = SetGestureConfig(hWnd, 0, uiGcs, gc, sizeof(GESTURECONFIG));  

if (!bResult){                
    DWORD err = GetLastError();                                       
}

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

GESTURECONFIG gc = {0,GC_ALLGESTURES,0};

UINT uiGcs = 1;

BOOL bResult = SetGestureConfig(hWnd, 0, uiGcs, &gc, sizeof(GESTURECONFIG));  

if (!bResult){                
    DWORD err = GetLastError();                                       
}              

В следующем примере показано, как включить все жесты Windows 7.

// set the settings in the gesture configuration
GESTURECONFIG gc[] = {{ GID_ZOOM, GC_ZOOM, 0 },
                      { GID_ROTATE, GC_ROTATE, 0},
                      { GID_PAN, GC_PAN , 0},
                      { GID_TWOFINGERTAP, GC_TWOFINGERTAP , 0},
                      { GID_PRESSANDTAP, GC_PRESSANDTAP , 0}
                     };    
                     
UINT uiGcs = 5;
BOOL bResult = SetGestureConfig(hWnd, 0, uiGcs, gc, sizeof(GESTURECONFIG));  

if (!bResult){                
    DWORD err = GetLastError();                                       
}

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

// set up our want / block settings for a parent window
DWORD dwPanWant  = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
DWORD dwPanBlock = GC_PAN_WITH_GUTTER | GC_PAN_WITH_INERTIA;

// set the settings in the gesture configuration
GESTURECONFIG gcParent[] = {{ GID_ZOOM, GC_ZOOM, 0 },
                            { GID_PAN, dwPanWant , dwPanBlock}                         
                           };    

// Set the pan settings for a child window
dwPanWant  = GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
dwPanBlock = GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_GUTTER | GC_PAN_WITH_INERTIA;
                     
GESTURECONFIG gcChild[]  = {{ GID_ZOOM, 0, GC_ZOOM },
                            { GID_PAN, dwPanWant , dwPanBlock}                         
                           };    

UINT uiGcs   = 2;
BOOL bResult = FALSE;
                     
if (isParent){      
  bResult = SetGestureConfig(hWnd, 0, uiGcs, gcParent, sizeof(GESTURECONFIG));  
}else{
  bResult = SetGestureConfig(hWnd, 0, uiGcs, gcChild, sizeof(GESTURECONFIG));  
}

if (!bResult){                
    DWORD err = GetLastError();                                       
}

Требования

   
Минимальная версия клиента Windows 7 [только классические приложения]
Минимальная версия сервера Windows Server 2008 R2 [только классические приложения]
Целевая платформа Windows
Header winuser.h (включая Windows.h)
Библиотека User32.lib
DLL User32.dll

См. также

Функции

GESTURECONFIG

GetGestureConfig

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

WM_GESTURENOTIFY