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;
};
获取和设置用于启用笔势消息的配置以及此配置的类型。
typedef struct _GESTURECONFIG { DWORD dwID; DWORD dwWant; DWORD dwBlock; } GESTURECONFIG, *PGESTURECONFIG;
将启用或禁用消息的配置类型的标识符。有关更多信息,请参见“备注”。
要启用的消息。
要禁用的消息。
无法禁用双指平移并保留单指平移。必须先为 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) |