Функция 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 ищет точку в журнале координат мыши. Если функция находит точку, она возвращает последние nBufPoints до и включая указанную точку.
Если приложение предоставляет метку времени, функция GetMouseMovePointsEx будет использовать ее для различения двух равных точек, записанных в разное время.
Приложение должно вызвать эту функцию, используя координаты мыши, полученные из сообщения WM_MOUSEMOVE , и преобразовать их в экранные координаты.
[out] lpptBuf
Тип: LPMOUSEMOVEPOINT
Указатель на буфер, который будет получать точки. Размер должен быть не менее cbSize* nBufPoints .
[in] nBufPoints
Тип: int
Количество извлекаемых точек.
[in] resolution
Тип: DWORD
Требуемое разрешение. Этот параметр может принимать одно из указанных ниже значений.
Возвращаемое значение
Тип: 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 |
Header | winuser.h (включая Windows.h) |
Библиотека | User32.lib |
DLL | User32.dll |
См. также раздел
Основные понятия
Справочные материалы