Фyнкция GetMouseMovePointsEx


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

Нет

Замечания по платформе

Не имеется

 

Назад в оглавление
На главную страницу
На оглавление справки

Hosted by uCoz