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 GestureInfo 结构中的 ptsLocation
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触摸手势编程指南