Функция GetMouseMovePointsEx извлекает архив данных до 64 предыдущих координат мыши или пера.
Синтаксис
int GetMouseMovePointsEx( UINT cbSize, LPMOUSEMOVEPOINT lppt, LPMOUSEMOVEPOINT lpptBuf, int nBufPoints, DWORD resolution ); |
Параметры
cbSize
[in] Устанавливает размер структуры MOUSEMOVEPOINT, в байтах.lppt
[in] Указатель на структуру MOUSEMOVEPOINT, содержащую допустимые координаты мыши (в экранных координатах). Параметр также может содержать и отметку времени.Функция GetMouseMovePointsEx разыскивает точку в архиве координат мыши. Если функция находит точку, она возвращает значение предпоследнего nBufPoints и включает в себя найденную точку.
Если ваше приложение сообщает отметку времени, функция GetMouseMovePointsEx будет использовать ее, чтобы делать различие между двумя одинаковыми точками, которые фиксировались в разное время.
Приложение должно вызывать эту функцию, используя координаты мыши, полученные от сообщения WM_MOUSEMOVE и преобразовать их в экранные координаты.
lpptBuf
[in] Указатель на буфер, который получил точки. Он должен быть, по крайней мере, величиной cbSize × nBufPoints.nBufPoints
[in] Устанавливает число извлекаемых точек.resolution
[in] Устанавливает требуемую разрешающую способность. Этим параметром может быть одно из ниже перечисленных значений.
Значение | Предназначение |
GMMP_USE_DISPLAY_POINTS | Извлекает данные о точках, используя разрешение вывода на экран. |
GMMP_USE_HIGH_RESOLUTION_POINTS | Извлекает точки высокого разрешения. Точки могут быть в диапазоне от нуля до 65 535 (0xFFFF) и по x-, и по y-координатам. Этой разрешающей способностью обеспечиваются устройства управления позицией с абсолютными координатами такие как цифровая панель (в устройствах "видеоживописи"). |
Возвращаемое значение
Если функция завершается успешно, возвращаемое значение - число точек в буфере. В противном случае, функция возвращает - (минус)1. Чтобы получить дополнительную информацию об ошибке, ваше приложение может вызвать GetLastError. Функция GetLastError может возвратить ниже перечисленные коды ошибок.
Значение Предназначение GMMP_ERR_POINT_NOT_FOUND Невозможно найти или больше не находится в системном буфере, указанная параметром lppt точка.
Замечания
Система сохраняет последние 64 координаты мыши и их отметки времени. Если ваше приложение сообщает координату мыши функции GetMouseMovePointsEx, и координата существует в архиве координат мыши системы, функция извлекает данные об указанном числе координат из этого системного архива. Вы можете также сообщить отметку времени, которая должна быть использована, чтобы различать идентичные точки в этом архиве.
Функция GetMouseMovePointsEx возвратит точки, которые в конечном счете были посланы не только вызывающему потоку, но также и другим потокам.
GetMouseMovePointsEx может завершиться ошибкой или возвратить ошибочные значения в следующих ниже случаях:
Эти ситуации могут произойти, если присутствуют многомониторные видеосистемы. Чтобы исправить это, сначала вызовите функцию GetSystemMetrics, чтобы получить ниже перечисленные значения:
Затем, для каждой точки, которая возвращается из 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 ;//Убедитесь, что это число // будет передано от начала // до конца. 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 ; } } |
Смотри также
Обзор Ввод данных от мыши, Функции, используемые мышью, MOUSEMOVEPOINT
Размещение и совместимость GetMouseMovePointsEx |
|
Windows. NET Server |
Да |
Windows XP |
Да |
Windows 2000 |
Да |
Windows NT |
Нет |
Windows Me |
Да |
Windows 98 |
Нет |
Windows 95 |
Нет |
Используемая библиотека |
User32.lib |
Заголовочный файл |
|
- объявлено в |
Winuser.h |
- включено в |
Windows.h |
Unicode |
Нет |
Замечания по платформе |
Не имеется |