getMouseMovePointsEx 函数 (winuser.h)
检索最多 64 个鼠标或笔的先前坐标的历史记录。
语法
int GetMouseMovePointsEx(
[in] UINT cbSize,
[in] LPMOUSEMOVEPOINT lppt,
[out] LPMOUSEMOVEPOINT lpptBuf,
[in] int nBufPoints,
[in] DWORD resolution
);
参数
[in] cbSize
类型: UINT
MOUSEMOVEPOINT 结构的大小(以字节为单位)。
[in] lppt
类型: LPMOUSEMOVEPOINT
指向 MOUSEMOVEPOINT 结构的指针,该结构包含有效鼠标坐标 (屏幕坐标) 。 它还可能包含时间戳。
GetMouseMovePointsEx 函数搜索鼠标坐标历史记录中的点。 如果函数找到该点,它将返回提供点之前的最后 一个 nBufPoint, 并包括提供的点。
如果应用程序提供时间戳, GetMouseMovePointsEx 函数将使用它来区分在不同时间记录的两个等点。
应用程序应使用从 WM_MOUSEMOVE 消息接收的鼠标坐标调用此函数,并将其转换为屏幕坐标。
[out] lpptBuf
类型: LPMOUSEMOVEPOINT
指向将接收点的缓冲区的指针。 它的大小至少应为 cbSize* nBufPoints 。
[in] nBufPoints
类型: int
要检索的点数。
[in] resolution
类型:DWORD
所需的分辨率。 此参数的取值可为下列值之一:
值 | 含义 |
---|---|
|
使用显示分辨率检索点。 |
|
检索高分辨率点。 x 坐标和 y 坐标中的点范围为 0 到 65,535 (0xFFFF) 。 这是绝对坐标指向设备(如绘图平板电脑)提供的分辨率。 |
返回值
类型: int
如果函数成功,则返回值为缓冲区中的点数。 否则,该函数返回 –1。 对于扩展的错误信息,应用程序可以调用 GetLastError。
注解
系统保留最后 64 个鼠标坐标及其时间戳。 如果应用程序向 GetMouseMovePointsEx 提供鼠标坐标,并且坐标存在于系统的鼠标坐标历史记录中,则函数将从系统的历史记录中检索指定数量的坐标。 还可以提供时间戳,用于区分历史记录中的相同点。
GetMouseMovePointsEx 函数将返回最终不仅调度到调用线程的点,还会返回其他线程的点。
在以下情况下,GetMouseMovePointsEx 可能会失败或返回错误值:
- 如果在 MOUSEMOVEPOINT 结构中传递负坐标。
- 如果 GetMouseMovePointsEx 检索具有负值的坐标。
- SM_XVIRTUALSCREEN,
- SM_YVIRTUALSCREEN,
- SM_CXVIRTUALSCREEN和
- SM_CYVIRTUALSCREEN。
int nVirtualWidth = GetSystemMetrics(SM_CXVIRTUALSCREEN) ;
int nVirtualHeight = GetSystemMetrics(SM_CYVIRTUALSCREEN) ;
int nVirtualLeft = GetSystemMetrics(SM_XVIRTUALSCREEN) ;
int nVirtualTop = GetSystemMetrics(SM_YVIRTUALSCREEN) ;
int cpt = 0 ;
int mode = GMMP_USE_DISPLAY_POINTS ;
MOUSEMOVEPOINT mp_in ;
MOUSEMOVEPOINT mp_out[64] ;
ZeroMemory(&mp_in, sizeof(mp_in)) ;
mp_in.x = pt.x & 0x0000FFFF ;//Ensure that this number will pass through.
mp_in.y = pt.y & 0x0000FFFF ;
cpt = GetMouseMovePointsEx(&mp_in, &mp_out, 64, mode) ;
for (int i = 0; i < cpt; i++)
{
switch(mode)
{
case GMMP_USE_DISPLAY_POINTS:
if (mp_out[i].x > 32767)
mp_out[i].x -= 65536 ;
if (mp_out[i].y > 32767)
mp_out[i].y -= 65536 ;
break ;
case GMMP_USE_HIGH_RESOLUTION_POINTS:
mp_out[i].x = ((mp_out[i].x * (nVirtualWidth - 1)) - (nVirtualLeft * 65536)) / nVirtualWidth ;
mp_out[i].y = ((mp_out[i].y * (nVirtualHeight - 1)) - (nVirtualTop * 65536)) / nVirtualHeight ;
break ;
}
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winuser.h (包括 Windows.h) |
Library | User32.lib |
DLL | User32.dll |
请参阅
概念性
引用