GetPointerFramePenInfo 函数 (winuser.h)
获取与当前消息关联的指定指针 (类型 PT_PEN) 的整个基于笔的信息帧。
语法
BOOL GetPointerFramePenInfo(
[in] UINT32 pointerId,
[in, out] UINT32 *pointerCount,
[out] POINTER_PEN_INFO *penInfo
);
参数
[in] pointerId
要检索其帧信息的指针的标识符。
[in, out] pointerCount
指向变量的指针,该变量指定 penInfo 指向的缓冲区中的结构计数。 如果 GetPointerFramePenInfo 成功, 则 pointerCount 将更新为帧中的指针总数。
[out] penInfo
要接收指针信息的 POINTER_PEN_INFO 结构的数组的地址。 如果 *pointerCount 为零,此参数可以为 NULL。
返回值
如果函数成功,则返回值为非零。
如果函数失败,则返回值为零。 要获得更多的错误信息,请调用 GetLastError。
注解
并行模式设备可以以帧形式报告指针输入,也就是说,它们可以在单个输入报表中向系统报告来自该设备的所有指针的状态和位置。 理想情况下,除非特定于应用程序的要求另有规定,否则应用程序应将整个帧视为单个输入。
GetPointerFramePenInfo 检索与) 消息类型的指针 (关联的整个指针输入帧 PT_PEN 。 使用 GetPointerPenInfo 检索与指针消息关联的单个指针的信息。
框架仅包含当前由指定指针所在的同一窗口拥有的指针。
GetPointerFrameInfo 返回的信息与调用线程检索的最新指针消息相关联。 当调用线程检索下一条消息时,与上一条消息关联的信息可能不再可用。
如果应用程序处理指针输入消息的速度不像生成的那样快,则某些消息可能会合并为 WM_POINTERUPDATE 消息。 使用 GetPointerFramePenInfoHistory 从最近的 WM_POINTERUPDATE 消息中检索消息历史记录。
检索了整个信息帧后,应用程序可以调用 SkipPointerFrameMessages 函数来跳过与此帧关联的剩余指针消息,这些消息正在等待检索。 这可节省应用程序逐个检索和处理剩余消息的开销。 但是, SkipPointerFrameMessages 函数应谨慎使用,并且仅当调用方可以确保调用方线程上没有其他实体期望在检索剩余指针消息时逐个看到它们。
请注意,检索的信息与调用线程最近检索的指针帧相关联。 调用线程检索其下一条消息后,与上一个指针帧关联的信息可能不再可用。
如果指针帧不包含指定指针以外的其他指针,则此函数将成功并仅返回指定指针的信息。
如果与指针帧关联的信息不再可用,此函数将失败,最后一个错误设置为 ERROR_NO_DATA。
如果调用线程不拥有指针消息已传递到的窗口,则此函数会失败,最后一个错误设置为 ERROR_ACCESS_DENIED。
如果指定的指针不是 PT_PEN 类型,则此函数将失败,最后一个错误设置为 ERROR_DATATYPE_MISMATCH。
对于同时具有客户端和非客户端区域的应用,输入帧可以同时包含客户端和非客户端数据。 若要区分客户端数据和非客户端数据,必须在目标窗口上执行命中测试。
如果要从输入帧筛选数据,建议执行以下操作:
- 对于不包含POINTER_FLAG_INCONTACT) POINTER_FLAG_UPDATE (指针接触的每个更新,命中测试以确定输入是客户端还是非客户端。
- 对于每个新联系人 (POINTER_FLAG_DOWN) ,命中测试以确定输入是客户端还是非客户端,并跟踪此信息。
- 对于包含POINTER_FLAG_INCONTACT) POINTER_FLAG_UPDATE (指针接触的每个更新,请使用跟踪信息来确定输入是客户端还是非客户端。
- 对于每个 POINTER_FLAG_UP,使用跟踪信息来确定输入是客户端还是非客户端,然后从跟踪数据中清除此指针。
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 8 [仅限桌面应用] |
最低受支持的服务器 | Windows Server 2012 [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |