Función GetMouseMovePointsEx (winuser.h)

Recupera un historial de hasta 64 coordenadas anteriores del mouse o lápiz.

Sintaxis

int GetMouseMovePointsEx(
  [in]  UINT             cbSize,
  [in]  LPMOUSEMOVEPOINT lppt,
  [out] LPMOUSEMOVEPOINT lpptBuf,
  [in]  int              nBufPoints,
  [in]  DWORD            resolution
);

Parámetros

[in] cbSize

Tipo: UINT

Tamaño, en bytes, de la estructura MOUSEMOVEPOINT .

[in] lppt

Tipo: LPMOUSEMOVEPOINT

Puntero a una estructura MOUSEMOVEPOINT que contiene coordenadas válidas del mouse (en coordenadas de pantalla). También puede contener una marca de tiempo.

La función GetMouseMovePointsEx busca el punto del historial de coordenadas del mouse. Si la función encuentra el punto, devuelve los últimos nBufPoints anteriores a e incluido el punto proporcionado.

Si la aplicación proporciona una marca de tiempo, la función GetMouseMovePointsEx la usará para diferenciar entre dos puntos iguales que se registraron en momentos diferentes.

Una aplicación debe llamar a esta función mediante las coordenadas del mouse recibidas del mensaje WM_MOUSEMOVE y convertirlas en coordenadas de pantalla.

[out] lpptBuf

Tipo: LPMOUSEMOVEPOINT

Puntero a un búfer que recibirá los puntos. Debe tener al menos el tamaño cbSize* nBufPoints .

[in] nBufPoints

Tipo: int

Número de puntos que se van a recuperar.

[in] resolution

Tipo: DWORD

Resolución deseada. Este parámetro puede ser uno de los valores siguientes.

Valor Significado
GMMP_USE_DISPLAY_POINTS
1
Recupera los puntos mediante la resolución de visualización.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
Recupera puntos de alta resolución. Los puntos pueden oscilar entre cero y 65 535 (0xFFFF) en coordenadas x e y. Esta es la resolución proporcionada por dispositivos que apuntan a coordenadas absolutas, como tabletas de dibujo.

Valor devuelto

Tipo: int

Si la función se ejecuta correctamente, el valor devuelto es el número de puntos del búfer. De lo contrario, la función devuelve –1. Para obtener información de error extendida, la aplicación puede llamar a GetLastError.

Comentarios

El sistema conserva las últimas 64 coordenadas del mouse y sus marcas de tiempo. Si la aplicación proporciona una coordenada del mouse a GetMouseMovePointsEx y la coordenada existe en el historial de coordenadas del mouse del sistema, la función recupera el número especificado de coordenadas del historial de los sistemas. También puede proporcionar una marca de tiempo, que se usará para diferenciar entre puntos idénticos en el historial.

La función GetMouseMovePointsEx devolverá puntos que finalmente se distribuyeron no solo al subproceso que realiza la llamada, sino también a otros subprocesos.

GetMouseMovePointsEx puede producir un error o devolver valores erróneos en los casos siguientes:

  • Si se pasan coordenadas negativas en la estructura MOUSEMOVEPOINT .
  • Si GetMouseMovePointsEx recupera una coordenada con un valor negativo.
Estas situaciones pueden producirse si hay varios monitores presentes. Para corregirlo, llame primero a GetSystemMetrics para obtener los siguientes valores:
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN y
  • SM_CYVIRTUALSCREEN.
A continuación, para cada punto que se devuelve de GetMouseMovePointsEx, realice la siguiente transformación:
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 ;
   }
} 

Requisitos

Requisito Value
Cliente mínimo compatible Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows 2000 Server [solo aplicaciones de escritorio]
Plataforma de destino Windows
Encabezado winuser.h (incluya Windows.h)
Library User32.lib
Archivo DLL User32.dll

Consulte también

Conceptual

MOUSEMOVEPOINT

Entrada de mouse

Referencia