touchINPUT 结构 (winuser.h)
封装触摸输入的数据。
语法
typedef struct tagTOUCHINPUT {
LONG x;
LONG y;
HANDLE hSource;
DWORD dwID;
DWORD dwFlags;
DWORD dwMask;
DWORD dwTime;
ULONG_PTR dwExtraInfo;
DWORD cxContact;
DWORD cyContact;
} TOUCHINPUT, *PTOUCHINPUT;
成员
x
x 坐标 (触摸输入的水平点) 。 此成员以物理屏幕坐标的百分之一像素表示。
y
y 坐标 (触摸输入的垂直点) 。 此成员以物理屏幕坐标的百分之一像素表示。
hSource
源输入设备的设备句柄。 触摸输入提供程序在运行时为每个设备提供唯一的提供程序。 请参阅下面的示例部分。
dwID
用于区分特定触摸输入的触摸点标识符。 此值在触摸接触序列中保持一致,从接触点下降到它恢复。 稍后可能会对后续联系人重复使用 ID。
dwFlags
一组位标志,用于指定触摸点按下、释放和运动的各个方面。 此成员中的位可以是“备注”部分中值的任意合理组合。
dwMask
一组位标志,用于指定结构中的哪些可选字段包含有效值。 可选字段中有效信息的可用性特定于设备。 仅当在 dwMask 中设置了相应的位时,应用程序才应使用可选字段值。 此字段可能包含“备注”部分中提到的 dwMask 标志的组合。
dwTime
事件的时间戳(以毫秒为单位)。 使用方应用程序应注意,系统不对此字段执行验证;如果未设置 TOUCHINPUTMASKF_TIMEFROMSYSTEM 标志,则此字段中值的准确性和顺序完全取决于触摸输入提供程序。
dwExtraInfo
与触摸事件关联的附加值。
cxContact
触摸接触区域的宽度,以物理屏幕坐标中的百分之一像素为单位。 仅当 dwMask 成员设置了 TOUCHEVENTFMASK_CONTACTAREA 标志时,此值才有效。
cyContact
触摸接触区域的高度(以物理屏幕坐标中的百分之一像素为单位)。 仅当 dwMask 成员设置了 TOUCHEVENTFMASK_CONTACTAREA 标志时,此值才有效。
注解
下表列出了 dwFlags 成员的标志。
标志 | 值 | 说明 |
---|---|---|
TOUCHEVENTF_MOVE | 0x0001 | 发生了移动。 不能与 TOUCHEVENTF_DOWN 结合使用。 |
TOUCHEVENTF_DOWN | 0x0002 | 相应的触摸点是通过新触点建立的。 不能与 TOUCHEVENTF_MOVE 或 TOUCHEVENTF_UP 结合使用。 |
TOUCHEVENTF_UP | 0x0004 | 删除了触摸点。 |
TOUCHEVENTF_INRANGE | 0x0008 | 触摸点在范围内。 此标志用于在兼容硬件上启用触摸悬停支持。 不希望支持悬停的应用程序可以忽略此标志。 |
TOUCHEVENTF_PRIMARY | 0x0010 | 指示此 TOUCHINPUT 结构对应于主要接触点。 有关主要接触点的详细信息,请参阅以下文本。 |
TOUCHEVENTF_NOCOALESCE | 0x0020 | 使用 GetTouchInputInfo 接收时,此输入未合并。 |
TOUCHEVENTF_PEN | 0x0040 | 触摸事件由触笔设备触发。 |
TOUCHEVENTF_PALM | 0x0080 | 触摸事件由用户的手掌触发。 |
标志 | 值 | 说明 |
---|---|---|
TOUCHINPUTMASKF_CONTACTAREA | 0x0004 | cxContact 和 cyContact 有效。 有关主要接触点的详细信息,请参阅以下文本。 |
TOUCHINPUTMASKF_EXTRAINFO | 0x0002 | dwExtraInfo 有效。 |
TOUCHINPUTMASKF_TIMEFROMSYSTEM | 0x0001 | 系统时间是在 TOUCHINPUT 结构中设置的。 |
当触摸点是从以前没有触摸点的状态建立的第一个触摸点时,该触摸点被指定为主接触点。 继续为主要触摸点的所有后续事件设置 TOUCHEVENTF_PRIMARY 标志,直到释放主要触摸点。 请注意,主要触摸点上的 TOUCHEVENTF_UP 事件不一定指定 Windows 触控操作的结束;当前 Windows 触控操作从主要触摸点的建立到释放最后一个触摸点为止。
请注意,在一组同时检测的第一个触摸点中,单独的触摸点或被指定为主接触点。 系统鼠标位置遵循主要触摸点,除了触摸消息之外,还会生成 WM_LBUTTONDOWN、 WM_MOUSEMOVE和 WM_LBUTTONUP 消息,以响应主要触摸点上的操作。 主要触摸点还可以使用长按手势生成 WM_RBUTTONDOWN 和 WM_RBUTTONUP 消息。
请注意,触摸点标识符可以是动态的,并且仅在触摸点保留时与给定的触摸点相关联。 如果接触断开,然后恢复 (例如,如果手指从表面上移除,然后再次按下) ,则同一触摸点 (同一个手指、笔或其他此类设备) 可能会收到不同的触摸点标识符。
以下类型定义为表示指向 TOUCHINPUT 结构的常量指针。
typedef TOUCHINPUT const * PCTOUCHINPUT;
示例
UINT cInputs = LOWORD(wParam);
PTOUCHINPUT pInputs = new TOUCHINPUT[cInputs];
if (NULL != pInputs)
{
if (GetTouchInputInfo((HTOUCHINPUT)lParam,
cInputs,
pInputs,
sizeof(TOUCHINPUT)))
{
// process pInputs
if (!CloseTouchInputHandle((HTOUCHINPUT)lParam))
{
// error handling
}
}
else
{
// GetLastError() and error handling
}
delete [] pInputs;
}
else
{
// error handling, presumably out of memory
}
return DefWindowProc(hWnd, message, wParam, lParam);
以下示例演示如何从 hSource 成员获取设备信息。 此示例使用 GetRawInputDevice 检索有关设备的信息。
for (UINT i = 0; i < cInputs; i++){
TOUCHINPUT ti = pInputs[i];
RID_DEVICE_INFO info;
ZeroMemory(&info, sizeof(RID_DEVICE_INFO));
info.cbSize = sizeof(RID_DEVICE_INFO);
UINT size = 0;
if (GetRawInputDeviceInfo(ti.hSource, RIDI_DEVICEINFO, &info, &size)){
}else{
DWORD err = GetLastError();
}
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 7 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2008 R2 [仅限桌面应用] |
标头 | winuser.h (包括 Windows.h) |