Fungsi GetMouseMovePointsEx (winuser.h)

Mengambil riwayat hingga 64 koordinat mouse atau pena sebelumnya.

Sintaks

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

Parameter

[in] cbSize

Jenis: UINT

Ukuran, dalam byte, dari struktur MOUSEMOVEPOINT .

[in] lppt

Jenis: LPMOUSEMOVEPOINT

Penunjuk ke struktur MOUSEMOVEPOINT yang berisi koordinat mouse yang valid (dalam koordinat layar). Ini mungkin juga berisi stempel waktu.

Fungsi GetMouseMovePointsEx mencari titik dalam riwayat koordinat mouse. Jika fungsi menemukan titiknya, fungsi mengembalikan nBufPoints terakhir sebelum dan menyertakan titik yang disediakan.

Jika aplikasi Anda menyediakan stempel waktu, fungsi GetMouseMovePointsEx akan menggunakannya untuk membedakan antara dua titik yang sama yang direkam pada waktu yang berbeda.

Aplikasi harus memanggil fungsi ini menggunakan koordinat mouse yang diterima dari pesan WM_MOUSEMOVE dan mengonversinya ke koordinat layar.

[out] lpptBuf

Jenis: LPMOUSEMOVEPOINT

Penunjuk ke buffer yang akan menerima poin. Ukurannya harus setidaknya cbSize* nBufPoints .

[in] nBufPoints

Jenis: int

Jumlah titik yang akan diambil.

[in] resolution

Jenis: DWORD

Resolusi yang diinginkan. Parameter ini bisa menjadi salah satu nilai berikut.

Nilai Makna
GMMP_USE_DISPLAY_POINTS
1
Mengambil titik menggunakan resolusi tampilan.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
Mengambil titik resolusi tinggi. Titik dapat berkisar dari nol hingga 65.535 (0xFFFF) dalam koordinat x dan y. Ini adalah resolusi yang disediakan oleh perangkat penunjuk koordinat absolut seperti menggambar tablet.

Mengembalikan nilai

Jenis: int

Jika fungsi berhasil, nilai yang dikembalikan adalah jumlah titik dalam buffer. Jika tidak, fungsi mengembalikan –1. Untuk informasi kesalahan yang diperluas, aplikasi Anda dapat memanggil GetLastError.

Keterangan

Sistem mempertahankan 64 koordinat mouse terakhir dan stempel waktunya. Jika aplikasi Anda menyediakan koordinat mouse ke GetMouseMovePointsEx dan koordinat ada dalam riwayat koordinat mouse sistem, fungsi mengambil jumlah koordinat yang ditentukan dari riwayat sistem. Anda juga dapat menyediakan stempel waktu, yang akan digunakan untuk membedakan antara titik-titik identik dalam riwayat.

Fungsi GetMouseMovePointsEx akan mengembalikan titik yang akhirnya dikirim tidak hanya ke utas panggilan tetapi juga ke utas lain.

GetMouseMovePointsEx mungkin gagal atau mengembalikan nilai yang salah dalam kasus berikut:

  • Jika koordinat negatif diteruskan dalam struktur MOUSEMOVEPOINT .
  • Jika GetMouseMovePointsEx mengambil koordinat dengan nilai negatif.
Situasi ini dapat terjadi jika ada beberapa monitor. Untuk memperbaikinya, pertama-tama panggil GetSystemMetrics untuk mendapatkan nilai berikut:
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN, dan
  • SM_CYVIRTUALSCREEN.
Kemudian, untuk setiap titik yang dikembalikan dari GetMouseMovePointsEx, lakukan transformasi berikut:
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 ;
   }
} 

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows 2000 Professional [hanya aplikasi desktop]
Server minimum yang didukung Windows 2000 Server [hanya aplikasi desktop]
Target Platform Windows
Header winuser.h (sertakan Windows.h)
Pustaka User32.lib
DLL User32.dll

Lihat juga

Konseptual

MOUSEMOVEPOINT

Mouse Input

Referensi