Funzione GetMouseMovePointsEx (winuser.h)
Recupera una cronologia di un massimo di 64 coordinate precedenti del mouse o della penna.
Sintassi
int GetMouseMovePointsEx(
[in] UINT cbSize,
[in] LPMOUSEMOVEPOINT lppt,
[out] LPMOUSEMOVEPOINT lpptBuf,
[in] int nBufPoints,
[in] DWORD resolution
);
Parametri
[in] cbSize
Tipo: UINT
Dimensione, in byte, della struttura MOUSEMOVEPOINT .
[in] lppt
Tipo: LPMOUSEMOVEPOINT
Puntatore a una struttura MOUSEMOVEPOINT contenente coordinate del mouse valide (nelle coordinate dello schermo). Può anche contenere un timestamp.
La funzione GetMouseMovePointsEx cerca il punto nella cronologia delle coordinate del mouse. Se la funzione trova il punto, restituisce gli ultimi nBufPoints precedenti e include il punto fornito.
Se l'applicazione fornisce un timestamp, la funzione GetMouseMovePointsEx la userà per distinguere tra due punti uguali registrati in momenti diversi.
Un'applicazione deve chiamare questa funzione usando le coordinate del mouse ricevute dal messaggio WM_MOUSEMOVE e convertirle in coordinate dello schermo.
[out] lpptBuf
Tipo: LPMOUSEMOVEPOINT
Puntatore a un buffer che riceverà i punti. Deve essere almeno cbSize* nBufPoints in dimensioni.
[in] nBufPoints
Tipo: int
Numero di punti da recuperare.
[in] resolution
Tipo: DWORD
Risoluzione desiderata. Questo parametro può avere uno dei valori seguenti.
Valore restituito
Tipo: int
Se la funzione ha esito positivo, il valore restituito è il numero di punti nel buffer. In caso contrario, la funzione restituisce –1. Per informazioni sugli errori estesi, l'applicazione può chiamare GetLastError.
Commenti
Il sistema mantiene le ultime 64 coordinate del mouse e i relativi timestamp. Se l'applicazione fornisce una coordinata del mouse a GetMouseMovePointsEx e la coordinata esiste nella cronologia delle coordinate del mouse del sistema, la funzione recupera il numero specificato di coordinate dalla cronologia dei sistemi. È anche possibile specificare un timestamp, che verrà usato per distinguere tra punti identici nella cronologia.
La funzione GetMouseMovePointsEx restituirà punti che alla fine sono stati inviati non solo al thread chiamante, ma anche ad altri thread.
GetMouseMovePointsEx potrebbe non riuscire o restituire valori errati nei casi seguenti:
- Se le coordinate negative vengono passate nella struttura MOUSEMOVEPOINT .
- Se GetMouseMovePointsEx recupera una coordinata con un valore negativo.
- SM_XVIRTUALSCREEN,
- SM_YVIRTUALSCREEN,
- SM_CXVIRTUALSCREEN e
- SM_CYVIRTUALSCREEN.
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 ;
}
}
Requisiti
Requisito | Valore |
---|---|
Client minimo supportato | Windows 2000 Professional [solo app desktop] |
Server minimo supportato | Windows 2000 Server [solo app desktop] |
Piattaforma di destinazione | Windows |
Intestazione | winuser.h (include Windows.h) |
Libreria | User32.lib |
DLL | User32.dll |
Vedi anche
Informazioni concettuali
Riferimento