GESTURECONFIG 结构与CGestureConfig类

CGestureConfig类是对GESTURECONFIG结构体的封装,从CObject类派生而来,是为了简化操作过程,为了更方便的使用,详细内容参考后面的GESTURECONFIG说明,具体代码如下:

/// 
/// CGestureConfig class allows to customize Windows gesture features such as zoom, pan or rotate. This class is used in CWnd::SetGestureConfig and CWnd::GetGestureConfig methods.
class CGestureConfig : public CObject
{
	friend class CWnd;

public:
	/// 
	/// CGestureConfig constructor
	CGestureConfig();

	/// 
	/// CGestureConfig destructor
	virtual ~CGestureConfig();

	/// 
	/// Enable/disable gesture zoom
	/// TRUE - enable the feature. FALSE - disable it
	void EnableZoom(BOOL bEnable = TRUE);

	/// 
	/// Enable/disable gesture rotate
	/// TRUE - enable the feature. FALSE - disable it
	void EnableRotate(BOOL bEnable = TRUE);

	/// 
	/// Enable/disable gesture 2 finger tap
	/// TRUE - enable the feature. FALSE - disable it
	void EnableTwoFingerTap(BOOL bEnable = TRUE);

	/// 
	/// Enable/disable gesture press and tap
	/// TRUE - enable the feature. FALSE - disable it
	void EnablePressAndTap(BOOL bEnable = TRUE);

	/// 
	/// Enable/disable gesture pan
	/// TRUE - enable the feature. FALSE - disable it
	/// Gesture pan flags. Can be either GC_PAN (all pan gestures) or combination of the following flags: GC_PAN_WITH_SINGLE_FINGER_VERTICALLY, GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY, GC_PAN_WITH_GUTTER and GC_PAN_WITH_INTERTIA
	void EnablePan(BOOL bEnable = TRUE, DWORD dwFlags = GC_PAN_WITH_GUTTER | GC_PAN_WITH_INERTIA);

	/// 
	/// Determines whether the gesture zoom feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsZoomEnabled() const { return (Get(GID_ZOOM) & GC_ZOOM) == GC_ZOOM; }

	/// 
	/// Determines whether the gesture rotate feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsRotateEnabled() const { return (Get(GID_ROTATE) & GC_ROTATE) == GC_ROTATE; }

	/// 
	/// Determines whether the gesture 2 finger tap feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsTwoFingerTapEnabled() const { return (Get(GID_TWOFINGERTAP) & GC_TWOFINGERTAP) == GC_TWOFINGERTAP; }

#if defined(GID_PRESSANDTAP) && defined(GC_PRESSANDTAP)
	/// 
	/// Determines whether the gesture "press and tap" feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsPressAndTapEnabled() const { return (Get(GID_PRESSANDTAP) & GC_PRESSANDTAP) == GC_PRESSANDTAP; }
#endif

	/// 
	/// Determines whether the gesture pan feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsPanAllEnabled() const { return (Get(GID_PAN) & GC_PAN) == GC_PAN; }

	/// 
	/// Determines whether the gesture pan vertical feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsPanVerticalEnabled() const { return (Get(GID_PAN) & GC_PAN_WITH_SINGLE_FINGER_VERTICALLY) == GC_PAN_WITH_SINGLE_FINGER_VERTICALLY; }

	/// 
	/// Determines whether the gesture pan horizontal feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsPanHorizontalEnabled() const { return (Get(GID_PAN) & GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY) == GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY; }

	/// 
	/// Determines whether the gesture pan with gutter feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsPanWithGutterEnabled() const { return (Get(GID_PAN) & GC_PAN_WITH_GUTTER) == GC_PAN_WITH_GUTTER; }

	/// 
	/// Determines whether the gesture pan with inertia feature is enabled
	///  
	/// TRUE if the feature is enabled; otherwise FALSE.
	BOOL IsPanWithInertiaEnabled() const { return (Get(GID_PAN) & GC_PAN_WITH_INERTIA) == GC_PAN_WITH_INERTIA; }

	/// 
	/// Modify specific gesture touch paramaters
	///  
	/// TRUE if succeeds; otherwise FALSE.
	/// Gesture feature ID. Can be one of the following: GID_ZOOM, GID_PAN, GID_ROTATE, GID_TWOFINGERTAP or GID_PRESSANDTAP
	/// Gesture features to enable. Can be 0 or GC_ALLGESTURES for all features except GID_PAN and GC_PAN or combination of the following flags: GC_PAN_WITH_SINGLE_FINGER_VERTICALLY, GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY, GC_PAN_WITH_GUTTER and GC_PAN_WITH_INTERTIA for gesture pan
	BOOL Modify(DWORD dwID, DWORD dwWant = GC_ALLGESTURES, DWORD dwBlock = 0);

	/// 
	/// Obtains a specific gesture touch paramaters
	///  
	/// Gesture features. Can be 0 or GC_ALLGESTURES for all features except GID_PAN and GC_PAN or combination of the following flags: GC_PAN_WITH_SINGLE_FINGER_VERTICALLY, GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY, GC_PAN_WITH_GUTTER and GC_PAN_WITH_INTERTIA for gesture pan
	/// Gesture feature ID. Can be one of the following: GID_ZOOM, GID_PAN, GID_ROTATE, GID_TWOFINGERTAP or GID_PRESSANDTAP
	/// TRUE - the method returns the enabled features; FALSE - disabled
	DWORD Get(DWORD dwID, BOOL bWant = TRUE) const;

#ifdef _DEBUG
	virtual void Dump(CDumpContext& dc) const;
#endif

protected:
	PGESTURECONFIG m_pConfigs;
	int	m_nConfigs;
};

以下是对GESTURECONFIG的详细说明。

获取和设置用于启用笔势消息的配置以及此配置的类型。

语法

typedef struct _GESTURECONFIG {
  DWORD dwID;
  DWORD dwWant;
  DWORD dwBlock;
} GESTURECONFIG, *PGESTURECONFIG;

成员

dwID

将启用或禁用消息的配置类型的标识符。有关更多信息,请参见“备注”。

dwWant

要启用的消息。

dwBlock

要禁用的消息。

评论

无法禁用双指平移并保留单指平移。必须先为 GC_PAN 设置所需的位,然后才能为 GC_PAN_WITH_SINGLE_FINGER_HORIZONTALLY 或 GC_PAN_WITH_SINGLE_FINGER_VERTICALLY 设置它们。

如果已通过调用 SetGestureConfig 来禁用延时,则带 GF_END 标志的 GID_PAN 消息中将包含延时矢量。

当传递此结构时,dwID 成员将包含有关一组笔势的信息。这将确定其他标志的含义。如果为平移消息设置标志,则这些标志将与为旋转消息设置的标志不同。

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

名称 说明
GID_ZOOM 3 指示缩放笔势的配置设置。
GID_PAN 4 指示平移笔势。
GID_ROTATE 5 指示旋转笔势。
GID_TWOFINGERTAP 6 指示双指点击笔势。
GID_PRESSANDTAP 7 指示按住并点击笔势。

 

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

名称 说明
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_INERTIA 0x00000010 指示带有延时的平移以便在平移笔势停止时平滑地慢慢停止。

 

注意   在 SetGestureConfig 中设置 GID_PAN 标志将影响用于平移的默认笔势处理程序。不应为相同的标志同时设置 dwWant 和 dwBlock;这将导致出现意外行为。有关平移和旧版平移支持的更多信息,请参见 Windows Touch 笔势;有关启用和阻止笔势的示例,请参见 SetGestureConfig

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

名称 说明
GC_ROTATE 0x00000001 指示旋转笔势。

 

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

名称 说明
GC_TWOFINGERTAP 0x00000001 指示双指点击笔势。

 

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

名称 说明
GC_PRESSANDTAP 0x00000001 指示按住并点击笔势。

 

示例

    GESTURECONFIG gc[3];    
    UINT uiGcs = 3;

    ZeroMemory(&gc, sizeof(gc));
    gc[0].dwID  = GID_ZOOM;
    gc[1].dwID  = GID_ROTATE;
    gc[2].dwID  = GID_PAN;
    BOOL bResult = GetGestureConfig(hWnd, 0, 0, &uiGcs, gc, sizeof(GESTURECONFIG));        
    if (!bResult){                
        DWORD err = GetLastError();                                       
    }    

要求

最低支持的客户端

Windows 7

最低支持的服务器

Windows Server 2008 R2

标头

Winuser.h (包括Windows.h)

你可能感兴趣的:(Windows,Touch)