SetGestureConfig 函数-中文整理

其实MFC已经封装了这个操作,GESTURECONFIG封装到了CGestureConfig类中,这样更方便,下面是演示的一段代码:

	CGestureConfig config;

	config.EnableZoom(m_bGestureZoom);
	config.EnableRotate(m_bGestureRotation);
	config.EnablePressAndTap(m_bGesturePressAndTap);
	config.EnableTwoFingerTap(m_bGesture2FingerTap);

	DWORD dwPanFlags = 0;
	dwPanFlags |= GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY;
	dwPanFlags |= GC_PAN_WITH_SINGLE_FINGER_VERTICALLY;
	dwPanFlags |= GC_PAN_WITH_GUTTER;
	dwPanFlags |= GC_PAN_WITH_INERTIA;

	config.EnablePan(m_bGesturePanlAll, dwPanFlags);

	SetGestureConfig(&config);

配置从 Windows Touch 笔势的窗口发送的消息。

语法

BOOL WINAPI SetGestureConfig(
  __in  HWND hwnd,
  __in  DWORD dwReserved,
  __in  UINT cIDs,
  __in  PGESTURECONFIG pGestureConfig,
  __in  UINT cbSize
);

参数

hwnd [in]

要从中设置笔势配置的窗口的句柄。

dwReserved [in]

此值已被保留且必须设置为 0。

cIDs [in]

要传递的笔势配置结构的计数。

pGestureConfig [in]

指定笔势配置的笔势配置结构的数组。

cbSize [in]

笔势配置 (GESTURECONFIG) 结构的大小。

返回值

如果函数成功,则返回值为非零值。

如果函数失败,则返回值为零。若要获取扩展的错误信息,请使用GetLastError 函数。

评论

如果不希望更改笔势配置,请在创建窗口时(OnCreate函数中)调用 SetGestureConfig。如果需要动态更改笔势配置,请调用 SetGestureConfig 以响应 WM_GESTURENOTIFY 消息。

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

名称说明
GID_ZOOM3缩放笔势的配置设置。
GID_PAN4平移笔势。
GID_ROTATE5旋转笔势。
GID_TWOFINGERTAP6双指点击笔势。
GID_PRESSANDTAP7按住并点击笔势。

 

当 dwID 设置为 0 时使用以下标志。

名称说明
GC_ALLGESTURES0x00000001所有笔势。

 

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

名称说明
GC_ZOOM0x00000001缩放笔势。

 

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

名称说明
GC_PAN0x00000001所有平移笔势。
GC_PAN_WITH_SINGLE_FINGER_VERTICALLY0x00000002单指垂直平移。
GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY0x00000004单指水平平移。
GC_PAN_WITH_GUTTER0x00000008带有围绕可平移区域的边缘的槽边界的平移。槽边界将垂直移动限制为向主方向进行,直至达到某个阈值以突破槽。
GC_PAN_WITH_INTERTIA0x00000010带有延时的平移,以便在平移笔势停止时平滑地慢慢停止。

 

注意   可将各个平移笔势配合使用来控制行为。例如,若将 dwWant 位设置为单指水平平移并将 dwBlock 位数设置为单指垂直平移,则会将平移限制为水平平移。若将 dwWant 位更改为具有GC_PAN_WITH_SINGLE_FINGER_VERTICALLY | GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 并从 dwBlock 位中删除单指垂直平移,则将同时启用垂直平移和水平平移。

注意   默认情况下,平移已启用延时。

注意   对 SetGestureConfig 的单个调用不能将其他 GID 与 0 一起包含。

当 dwID 设置为 GID_ROTATE 时使用以下标志。

名称说明
GC_ROTATE0x00000001旋转笔势。

 

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

名称说明
GC_TWOFINGERTAP0x00000001双指点击笔势。

 

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

名称说明
GC_PRESSANDTAP0x00000001按住并点击笔势。

 

注意   调用 SetGestureConfig 将更改窗口生存期内的笔势配置,而不只是更改下一个笔势的笔势配置。

示例

以下示例演示如何接收不带槽和延时的水平与垂直单指平移。这是二维导航应用程序(如 Microsoft Surface 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();                                       
}
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页