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_BEGIN和GID_END手势命令的消息。
下表指示在 lParam 和 wParam 参数中传递的手势参数。
手势 ID | 手势 | ullArgument | GestureInfo 结构中的 ptsLocation |
---|---|---|---|
GID_ZOOM | 放大/缩小字体功能 放大缩小字体功能 | 指示两个点之间的距离。 | 指示缩放的中心。 |
GID_PAN | 平移 | 指示两个点之间的距离。 | 指示平移的当前位置。 |
GID_ROTATE | 旋转 (透视) | 指示设置 GF_BEGIN 标志时旋转的角度。 否则,这是自旋转开始以来的角度变化。 这是签名以指示旋转的方向。 使用 GID_ROTATE_ANGLE_FROM_ARGUMENT 和 GID_ROTATE_ANGLE_TO_ARGUMENT 宏获取和设置角度值。 | 这表示旋转的中心,即目标对象旋转周围的固定点。 |
GID_TWOFINGERTAP | 双指点击 | 指示两根手指之间的距离。 | 指示两根手指的中心。 |
GID_PRESSANDTAP | 按并点击 | 指示第一根手指和第二根手指之间的增量。 此值存储在 POINT 结构的低 32 位 ullArgument 中。 | 指示第一根手指向下放置的位置。 |
注意
所有距离和位置都以物理屏幕坐标提供。
注意
dwID 和 ullArgument 参数只应被视为随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 [仅限桌面应用] |
标头 |
|