Share via


GetMouseMovePointsEx, fonction (winuser.h)

Récupère l’historique des coordonnées de la souris ou du stylet (64 maximum).

Syntaxe

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

Paramètres

[in] cbSize

Type : UINT

Taille, en octets, de la structure MOUSEMOVEPOINT .

[in] lppt

Type : LPMOUSEMOVEPOINT

Pointeur vers une structure MOUSEMOVEPOINT contenant des coordonnées de souris valides (dans les coordonnées de l’écran). Il peut également contenir un horodatage.

La fonction GetMouseMovePointsEx recherche le point dans l’historique des coordonnées de la souris. Si la fonction trouve le point, elle retourne les derniers nBufPoints avant et y compris le point fourni.

Si votre application fournit un horodatage, la fonction GetMouseMovePointsEx l’utilise pour différencier deux points égaux qui ont été enregistrés à des moments différents.

Une application doit appeler cette fonction à l’aide des coordonnées de la souris reçues du message WM_MOUSEMOVE et les convertir en coordonnées d’écran.

[out] lpptBuf

Type : LPMOUSEMOVEPOINT

Pointeur vers une mémoire tampon qui recevra les points. Il doit avoir au moins la taille denBufPointscbSize* .

[in] nBufPoints

Type : int

Nombre de points à récupérer.

[in] resolution

Type : DWORD

Résolution souhaitée. Ce paramètre peut prendre les valeurs suivantes.

Valeur Signification
GMMP_USE_DISPLAY_POINTS
1
Récupère les points à l’aide de la résolution d’affichage.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
Récupère les points de haute résolution. Les points peuvent varier de zéro à 65 535 (0xFFFF) dans les coordonnées x et y. Il s’agit de la résolution fournie par les dispositifs de pointage de coordonnées absolues tels que le dessin de tablettes.

Valeur retournée

Type : int

Si la fonction réussit, la valeur de retour est le nombre de points dans la mémoire tampon. Sinon, la fonction retourne –1. Pour obtenir des informations d’erreur étendues, votre application peut appeler GetLastError.

Remarques

Le système conserve les 64 dernières coordonnées de la souris et leurs horodatages. Si votre application fournit une coordonnée de souris à GetMouseMovePointsEx et que la coordonnée existe dans l’historique des coordonnées de souris du système, la fonction récupère le nombre spécifié de coordonnées à partir de l’historique des systèmes. Vous pouvez également fournir un horodatage, qui sera utilisé pour différencier des points identiques dans l’historique.

La fonction GetMouseMovePointsEx retourne des points qui ont finalement été distribués non seulement au thread appelant, mais également à d’autres threads.

GetMouseMovePointsEx peut échouer ou retourner des valeurs erronées dans les cas suivants :

  • Si les coordonnées négatives sont passées dans la structure MOUSEMOVEPOINT .
  • Si GetMouseMovePointsEx récupère une coordonnée avec une valeur négative.
Ces situations peuvent se produire si plusieurs moniteurs sont présents. Pour corriger ce problème, appelez d’abord GetSystemMetrics pour obtenir les valeurs suivantes :
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN, et
  • SM_CYVIRTUALSCREEN.
Ensuite, pour chaque point retourné par GetMouseMovePointsEx, effectuez la transformation suivante :
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 ;
   }
} 

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 2000 Professionnel [applications de bureau uniquement]
Serveur minimal pris en charge Windows 2000 Server [applications de bureau uniquement]
Plateforme cible Windows
En-tête winuser.h (inclure Windows.h)
Bibliothèque User32.lib
DLL User32.dll

Voir aussi

Conceptuel

MOUSEMOVEPOINT

Entrées de la souris

Référence