Поделиться через


Функция 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

Требуемое разрешение. Этот параметр может принимать одно из указанных ниже значений.

Значение Значение
GMMP_USE_DISPLAY_POINTS
1
Извлекает точки с помощью разрешения экрана.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
Извлекает точки с высоким разрешением. Точки могут варьироваться от нуля до 65 535 (0xFFFF) в координатах X и Y. Это разрешение обеспечивается абсолютными устройствами, указывающими на координаты, такими как планшеты для рисования.

Возвращаемое значение

Тип: int

Если функция выполнена успешно, возвращаемое значение — это количество точек в буфере. В противном случае функция возвращает –1. Для получения дополнительных сведений об ошибке приложение может вызывать GetLastError.

Комментарии

Система сохраняет последние 64 координаты мыши и их метки времени. Если приложение предоставляет координату мыши getMouseMovePointsEx , а координата существует в журнале координат мыши системы, функция извлекает указанное количество координат из журнала систем. Можно также указать метку времени, которая будет использоваться для различения идентичных точек в журнале.

Функция GetMouseMovePointsEx возвращает точки, которые в конечном итоге были отправлены не только в вызывающий поток, но и в другие потоки.

GetMouseMovePointsEx может завершаться ошибкой или возвращать ошибочные значения в следующих случаях:

  • Если отрицательные координаты передаются в структуре MOUSEMOVEPOINT .
  • Если GetMouseMovePointsEx извлекает координату с отрицательным значением.
Такие ситуации могут возникнуть при наличии нескольких мониторов. Чтобы исправить это, сначала вызовите GetSystemMetrics , чтобы получить следующие значения:
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN и
  • SM_CYVIRTUALSCREEN.
Затем для каждой точки, возвращаемой из GetMouseMovePointsEx, выполните следующее преобразование:
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

См. также раздел

Основные понятия

MOUSEMOVEPOINT

Ввод с помощью мыши

Справочные материалы