setGestureConfig 函数 (winuser.h)

为 Windows 触控手势配置从窗口发送的消息。

语法

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 消息。

下表显示了 GESTURECONFIG 结构的 dwID 成员支持的手势的标识符。 请注意,将 dwID 设置为 0 表示已设置全局手势配置标志。

名称 Value 说明
GID_ZOOM 3 缩放手势的配置设置。
GID_PAN 4 平移手势。
GID_ROTATE 5 旋转手势。
GID_TWOFINGERTAP 6 双指点击手势。
GID_PRESSANDTAP 7 按下和点击手势。
 

dwID 设置为零时,将使用以下标志。

名称 Value 说明
GC_ALLGESTURES 0x00000001 所有手势。
 

dwID 设置为 GID_ZOOM 时,将使用以下标志。

名称 Value 说明
GC_ZOOM 0x00000001 缩放手势。
 

dwID 设置为 GID_PAN 时,将使用以下标志。

名称 Value 说明
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 时,将使用以下标志。
名称 Value 说明
GC_ROTATE 0x00000001 旋转手势。
 

dwID 设置为 GID_TWOFINGERTAP 时,将使用以下标志。

名称 Value 说明
GC_TWOFINGERTAP 0x00000001 双指点击手势。
 

dwID 设置为 GID_PRESSANDTAP 时,将使用以下标志。

名称 Value 说明
GC_PRESSANDTAP 0x00000001 按下和点击手势。
 
注意 调用 SetGestureConfig 将更改 Window 生存期的手势配置,而不仅仅是下一个手势。
 

示例

以下示例演示了如何在没有装线和惯性的情况下接收水平和垂直单指平移。 这是二维导航应用程序(例如 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
标头 winuser.h (包括 Windows.h)
Library User32.lib
DLL User32.dll

请参阅

函数

GESTURECONFIG

GetGestureConfig

手势编程指南

WM_GESTURENOTIFY