Функция 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 |
Нет |
|
Замечания по платформе |
Не имеется |