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 | PtsLocation in GestureInfo 结构 |
---|---|---|---|
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 [仅限桌面应用] |
标头 |
|