GESTUREINFO 结构 (winuser.h)
存储有关手势的信息。
语法
typedef struct tagGESTUREINFO {
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,它是两个点之间的距离。
以下标志指示手势的各种状态,并存储在 dwFlags 中。
名称 | Value | 说明 |
---|---|---|
GF_BEGIN | 0x00000001 | 手势正在启动。 |
GF_INERTIA | 0x00000002 | 手势触发了惯性。 |
GF_END | 0x00000004 | 手势已完成。 |
注意 大多数应用程序应忽略 GID_BEGIN 并 GID_END 消息并将其传递给 DefWindowProc。
默认笔势处理程序使用这些消息。 当第三方应用程序使用 GID_BEGIN 和 GID_END 消息时,应用程序行为未定义。
名称 | Value | 说明 |
---|---|---|
GID_BEGIN | 1 | 手势正在启动。 |
GID_END | 2 | 手势正在结束。 |
GID_ZOOM | 3 | 缩放手势。 |
GID_PAN | 4 | 平移手势。 |
GID_ROTATE | 5 | 旋转手势。 |
GID_TWOFINGERTAP | 6 | 双指点击手势。 |
GID_PRESSANDTAP | 7 | 按下和点击手势。 |
注意GID_PAN手势具有内置的惯性。 在平移手势结束时,操作系统会创建其他平移手势消息。
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) |