Windows Touch的GESTURECONFIG,GESTUREINFO,GESTURENOTIFYSTRUCT结构体-中文整理

本节包含有关 Windows Touch 笔势的结构。

本节中指定了以下结构。

结构说明
GESTURECONFIG用于设置启用或禁用哪些笔势消息的配置。
GESTUREINFO包含有关笔势的信息。
GESTURENOTIFYSTRUCT包含有关 WM_GESTURENOTIFY 通知的信息。

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_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_INERTIA0x00000010指示带有延时的平移以便在平移笔势停止时平滑地慢慢停止。

 

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

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

名称说明
GC_ROTATE0x00000001指示旋转笔势。

 

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

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

 

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

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

 

示例

    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();                                       
    }    

GESTUREINFO 结构

 

存储有关笔势的信息。

语法

typedef struct _GESTUREINFO {
  UINT      cbSize;
  DWORD     dwFlags;
  DWORD     dwID;
  HWND      hwndTarget;
  POINTS    ptsLocation;
  DWORD     dwInstanceID;
  DWORD     dwSequenceID;
  ULONGLONG ullArguments;
  UINT      cbExtraArgs;
} GESTUREINFO, *PGESTUREINFO;

成员

cbSize

结构的大小(以字节为单位)。调用方必须将此成员设置为 sizeof(GESTUREINFO)

dwFlags

笔势的状态。有关其他信息,请参见“备注”。

dwID

笔势命令的标识符。

hwndTarget

此笔势面向的窗口的句柄。

ptsLocation

POINTS 结构,其中包含与笔势关联的坐标。这些坐标总是相对于屏幕原点。

dwInstanceID

结构的内部使用的标识符。

dwSequenceID

序列的内部使用的标识符。

ullArguments

一个 64 位无符号整数,其中包含适合 8 个字节的笔势参数。

cbExtraArgs

此笔势附带的外部参数的大小(以字节为单位)。

评论

ullArguments 成员的 HIDWORD 始终为 0,但存在以下例外情况:

  • 对于 GID_PAN,除非存在延时,否则它为 0。若设置 GF_INERTIA,则 HIDWORD 为一个延时矢量(两个 16 位值)。
  • 对于 GID_PRESSANDTAP,它是两个点之间的距离。

通过将笔势信息结构的句柄传递给 GetGestureInfo 函数来检索 GESTUREINFO 结构。

以下标志指示笔势的各种状态,这些标志存储在 dwFlags 中。

名称说明
GF_BEGIN0x00000001笔势已开始。
GF_INERTIA0x00000002笔势已触发延时。
GF_END0x00000004笔势已完成。

 

注意   大多数应用程序将忽略 GID_BEGIN 和 GID_END 消息,并会将它们传递到 DefWindowProc。默认的笔势处理程序将使用这些消息。当第三方应用程序使用 GID_BEGIN 和 GID_END 消息时,应用程序行为将是不确定的。

下表指示笔势的各种标识符。

名称说明
GID_BEGIN1笔势已开始。
GID_END2笔势已结束。
GID_ZOOM3缩放笔势。
GID_PAN4平移笔势。
GID_ROTATE5旋转笔势。
GID_TWOFINGERTAP6双指点击笔势。
GID_PRESSANDTAP7按住并点击笔势。

 

注意   GID_PAN 笔势具有内置延时。在平移笔势结束时,操作系统将创建其他平移笔势消息。

定义以下类型以表示指向 GESTUREINFO 结构的常量指针。

    typedef GESTUREINFO const * PCGESTUREINFO;	 

示例

  LRESULT DecodeGesture(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam){
    // Create a structure to populate and retrieve the extra message info.
    GESTUREINFO gi;  
    
    ZeroMemory(&gi, sizeof(GESTUREINFO));
    
    gi.cbSize = sizeof(GESTUREINFO);

    BOOL bResult  = GetGestureInfo((HGESTUREINFO)lParam, &gi);
    BOOL bHandled = FALSE;

    if (bResult){
        // now interpret the gesture
        switch (gi.dwID){
           case GID_ZOOM:
               // Code for zooming goes here     
               bHandled = TRUE;
               break;
           case GID_PAN:
               // Code for panning goes here
               bHandled = TRUE;
               break;
           case GID_ROTATE:
               // Code for rotation goes here
               bHandled = TRUE;
               break;
           case GID_TWOFINGERTAP:
               // Code for two-finger tap goes here
               bHandled = TRUE;
               break;
           case GID_PRESSANDTAP:
               // Code for roll over goes here
               bHandled = TRUE;
               break;
           default:
               // A gesture was not recognized
               break;
        }
    }else{
        DWORD dwErr = GetLastError();
        if (dwErr > 0){
            //MessageBoxW(hWnd, L"Error!", L"Could not retrieve a GESTUREINFO structure.", MB_OK);
        }
    }
    if (bHandled){
        return 0;
    }else{
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
  }

GESTURENOTIFYSTRUCT 结构

当使用 WM_GESTURENOTIFY 消息进行传输时,将传递有关笔势的信息。

语法

typedef struct tagGESTURENOTIFYSTRUCT {
  UINT   cbSize;
  DWORD  dwFlags;
  HWND   hwndTarget;
  POINTS ptsLocation;
  DWORD  dwInstanceID;
} GESTURENOTIFYSTRUCT, *PGESTURENOTIFYSTRUCT;

成员

cbSize

结构的大小。

dwFlags

保留以供将来使用。

hwndTarget

笔势通知的目标窗口。

ptsLocation

笔势在物理屏幕坐标中的位置。

dwInstanceID

一个特定的笔势实例,其笔势消息以 GID_START 开始并以 GID_END 结束。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值