Freigeben über


GetMouseMovePointsEx-Funktion (winuser.h)

Ruft einen Verlauf mit bis zu 64 vorheriger Koordinaten der Maus oder des Stifts ab.

Syntax

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

Parameter

[in] cbSize

Typ: UINT

Die Größe der MOUSEMOVEPOINT-Struktur in Bytes.

[in] lppt

Typ: LPMOUSEMOVEPOINT

Ein Zeiger auf eine MOUSEMOVEPOINT-Struktur , die gültige Mauskoordinaten (in Bildschirmkoordinaten) enthält. Es kann auch einen Zeitstempel enthalten.

Die GetMouseMovePointsEx-Funktion sucht nach dem Punkt im Verlauf der Mauskoordinaten. Wenn die Funktion den Punkt findet, gibt sie die letzten nBufPoints vor und einschließlich des angegebenen Punkts zurück.

Wenn Ihre Anwendung einen Zeitstempel bereitstellt, verwendet die GetMouseMovePointsEx-Funktion diesen, um zwischen zwei gleichen Punkten zu unterscheiden, die zu unterschiedlichen Zeiten aufgezeichnet wurden.

Eine Anwendung sollte diese Funktion mithilfe der Mauskoordinaten aufrufen, die von der WM_MOUSEMOVE-Nachricht empfangen werden, und sie in Bildschirmkoordinaten konvertieren.

[out] lpptBuf

Typ: LPMOUSEMOVEPOINT

Ein Zeiger auf einen Puffer, der die Punkte empfängt. Sie sollte mindestens cbSize* nBufPoints groß sein.

[in] nBufPoints

Typ: int

Die Anzahl der abzurufenden Punkte.

[in] resolution

Art: DWORD

Die gewünschte Auflösung. Dieser Parameter kann einen der folgenden Werte annehmen.

Wert Bedeutung
GMMP_USE_DISPLAY_POINTS
1
Ruft die Punkte mithilfe der Anzeigeauflösung ab.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
Ruft Punkte mit hoher Auflösung ab. Punkte können in x- und y-Koordinaten von null bis 65.535 (0xFFFF) liegen. Dies ist die Auflösung, die von absoluten Koordinatenzeigengeräten wie Zeichnungs-Tablets bereitgestellt wird.

Rückgabewert

Typ: int

Wenn die Funktion erfolgreich ist, ist der Rückgabewert die Anzahl der Punkte im Puffer. Andernfalls gibt die Funktion –1 zurück. Für erweiterte Fehlerinformationen kann Ihre Anwendung GetLastError aufrufen.

Hinweise

Das System behält die letzten 64 Mauskoordinaten und deren Zeitstempel bei. Wenn Ihre Anwendung eine Mauskoordinate für GetMouseMovePointsEx bereitstellt und die Koordinate im Mauskoordinatenverlauf des Systems vorhanden ist, ruft die Funktion die angegebene Anzahl von Koordinaten aus dem Systemverlauf ab. Sie können auch einen Zeitstempel angeben, der verwendet wird, um zwischen identischen Punkten im Verlauf zu unterscheiden.

Die GetMouseMovePointsEx-Funktion gibt Punkte zurück, die schließlich nicht nur an den aufrufenden Thread, sondern auch an andere Threads verteilt wurden.

GetMouseMovePointsEx kann in den folgenden Fällen fehlschlagen oder fehlerhafte Werte zurückgeben:

  • Wenn negative Koordinaten in der MOUSEMOVEPOINT-Struktur übergeben werden.
  • Wenn GetMouseMovePointsEx eine Koordinate mit einem negativen Wert abruft.
Diese Situationen können auftreten, wenn mehrere Monitore vorhanden sind. Um dies zu beheben, rufen Sie zunächst GetSystemMetrics auf, um die folgenden Werte abzurufen:
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN und
  • SM_CYVIRTUALSCREEN.
Führen Sie dann für jeden Punkt, der von GetMouseMovePointsEx zurückgegeben wird, die folgende Transformation aus:
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 ;
   }
} 

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile winuser.h (windows.h einschließen)
Bibliothek User32.lib
DLL User32.dll

Siehe auch

Konzept

MOUSEMOVEPOINT

Mauseingabe

Referenz