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

要求

最低支持的客户端

Windows 7

最低支持的服务器

Windows Server 2008 R2

标头

Winuser.h (包括Windows.h)

另请参见

GetGestureInfo
Structures
WM_GESTURE

 

 

社区附加资源

添加
显示:
© 2015 Microsoft