WM_GESTURE消息

传递有关手势的信息。

参数

wParam

提供标识手势命令和手势特定参数值的信息。 此信息与在 GESTUREINFO 结构的 ullArguments 成员中传递的信息相同。

lParam

提供标识手势命令和手势特定参数值的信息句柄。 通过调用 GetGestureInfo 检索此信息。

返回值

如果应用程序处理此消息,它应返回 0。

如果应用程序不处理消息,则必须调用 DefWindowProc。 否则会导致应用程序泄漏内存,因为不会关闭触摸输入句柄,并且不会释放关联的进程内存。

备注

下表列出了支持的手势命令。

手势 ID 值 (dwID) 说明
GID_BEGIN 1 指示一般手势正在开始。
GID_END 2 指示通用手势结束。
GID_ZOOM 3 指示缩放开始、缩放移动或缩放停止。 第一 个GID_ZOOM 命令消息开始缩放,但不会导致任何缩放。 第二个 GID_ZOOM 命令触发相对于第一个 GID_ZOOM中包含的状态的缩放。
GID_PAN 4 指示平移或平移开始。 第一个 GID_PAN 命令指示开始平移,但不执行任何平移。 使用第二 条GID_PAN 命令消息,应用程序将开始平移。
GID_ROTATE 5 指示旋转移动或旋转开始。 第一 个GID_ROTATE 命令消息指示旋转移动或旋转开始,但不会旋转。 第二个 GID_ROTATE 命令消息将触发相对于第一个GID_ROTATE中包含的状态 旋转操作。
GID_TWOFINGERTAP 6 指示双指点击手势。
GID_PRESSANDTAP 7 指示按下和点击手势。

注意

若要启用旧版支持,需要使用 DefWindowProc 转发具有GID_BEGINGID_END手势命令的消息。

下表指示 lParamwParam 参数中传递的手势参数。

手势 ID 手势 ullArgument PtsLocation in GestureInfo 结构
GID_ZOOM 放大缩小字体功能 放大缩小字体功能 指示两个点之间的距离。 指示缩放的中心。
GID_PAN 平移 指示两个点之间的距离。 指示平移的当前位置。
GID_ROTATE 旋转 (透视) 如果设置了 GF_BEGIN 标志,则指示旋转角度。 否则,这是自旋转开始以来的角度变化。 这是为指示旋转方向而签名的。 使用 GID_ROTATE_ANGLE_FROM_ARGUMENTGID_ROTATE_ANGLE_TO_ARGUMENT 宏获取和设置角度值。 这指示旋转的中心,即目标对象旋转的固定点。
GID_TWOFINGERTAP 双指点击 指示两根手指之间的距离。 指示两根手指的中心。
GID_PRESSANDTAP 按并点击 指示第一根手指与第二根手指之间的增量。 此值存储在 POINT 结构的低 32 位 ullArgument 中。 指示第一根手指向下放置的位置。

注意

所有距离和位置都以物理屏幕坐标提供。

注意

dwIDullArgument 参数应仅被视为GID_* 命令的附带参数,不应由应用程序更改。

示例

以下代码演示如何获取与此消息关联的特定于手势的信息。

注意

应始终将未处理的消息转发到 DefWindowProc ,并且应关闭通过调用 CloseGestureInfoHandle 处理的消息的笔势输入句柄。 在此示例中,默认笔势处理程序行为将被禁止,因为每个笔势情况下的 TOUCHINPUT 句柄都已关闭。 如果在上述代码中删除了未处理消息的事例,则默认笔势处理程序将通过转发到默认情况下的 DefWindowProc 来处理消息。

  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)

另请参阅

通知

Windows 触控手势编程指南