GESTUREINFO 结构 (winuser.h)

存储有关手势的信息。

语法

typedef struct tagGESTUREINFO {
  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 中

名称 Value 说明
GF_BEGIN 0x00000001 手势正在启动。
GF_INERTIA 0x00000002 手势触发了惯性。
GF_END 0x00000004 手势已完成。
 
注意 大多数应用程序应忽略 GID_BEGINGID_END 消息并将其传递给 DefWindowProc。 默认笔势处理程序使用这些消息。 当第三方应用程序使用 GID_BEGINGID_END 消息时,应用程序行为未定义。
 
下表指示手势的各种标识符。
名称 Value 说明
GID_BEGIN 1 手势正在启动。
GID_END 2 手势正在结束。
GID_ZOOM 3 缩放手势。
GID_PAN 4 平移手势。
GID_ROTATE 5 旋转手势。
GID_TWOFINGERTAP 6 双指点击手势。
GID_PRESSANDTAP 7 按下和点击手势。
 
注意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);
    }
  }

要求

   
最低受支持的客户端 Windows 7 [仅限桌面应用]
最低受支持的服务器 Windows Server 2008 R2 [仅限桌面应用]
标头 winuser.h (包括 Windows.h)

另请参阅

GetGestureInfo

结构

WM_GESTURE