Função GetMouseMovePointsEx (winuser.h)

Recupera um histórico de até 64 coordenadas anteriores do mouse ou da caneta.

Sintaxe

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

Parâmetros

[in] cbSize

Tipo: UINT

O tamanho, em bytes, da estrutura MOUSEMOVEPOINT .

[in] lppt

Tipo: LPMOUSEMOVEPOINT

Um ponteiro para uma estrutura MOUSEMOVEPOINT que contém coordenadas válidas do mouse (em coordenadas de tela). Ele também pode conter um carimbo de data/hora.

A função GetMouseMovePointsEx pesquisa o ponto no histórico de coordenadas do mouse. Se a função encontrar o ponto, ela retornará os últimos nBufPoints antes e incluindo o ponto fornecido.

Se o aplicativo fornecer um carimbo de data/hora, a função GetMouseMovePointsEx o usará para diferenciar entre dois pontos iguais que foram registrados em momentos diferentes.

Um aplicativo deve chamar essa função usando as coordenadas do mouse recebidas da mensagem WM_MOUSEMOVE e convertê-las em coordenadas de tela.

[out] lpptBuf

Tipo: LPMOUSEMOVEPOINT

Um ponteiro para um buffer que receberá os pontos. Ele deve ter pelo menos cbSize* nBufPoints em tamanho.

[in] nBufPoints

Tipo: int

O número de pontos a serem recuperados.

[in] resolution

Tipo: DWORD

A resolução desejada. Esse parâmetro pode usar um dos valores a seguir.

Valor Significado
GMMP_USE_DISPLAY_POINTS
1
Recupera os pontos usando a resolução de exibição.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
Recupera pontos de alta resolução. Os pontos podem variar de zero a 65.535 (0xFFFF) em coordenadas x e y. Essa é a resolução fornecida por dispositivos que apontam coordenadas absolutas, como tablets de desenho.

Retornar valor

Tipo: int

Se a função for bem-sucedida, o valor retornado será o número de pontos no buffer. Caso contrário, a função retornará –1. Para obter informações de erro estendidas, seu aplicativo pode chamar GetLastError.

Comentários

O sistema retém as últimas 64 coordenadas do mouse e seus carimbos de data/hora. Se o aplicativo fornecer uma coordenada do mouse para GetMouseMovePointsEx e a coordenada existir no histórico de coordenadas do mouse do sistema, a função recuperará o número especificado de coordenadas do histórico dos sistemas. Você também pode fornecer um carimbo de data/hora, que será usado para diferenciar entre pontos idênticos no histórico.

A função GetMouseMovePointsEx retornará pontos que eventualmente foram enviados não apenas para o thread de chamada, mas também para outros threads.

GetMouseMovePointsEx pode falhar ou retornar valores incorretos nos seguintes casos:

  • Se coordenadas negativas forem passadas na estrutura MOUSEMOVEPOINT .
  • Se GetMouseMovePointsEx recuperar uma coordenada com um valor negativo.
Essas situações poderão ocorrer se vários monitores estiverem presentes. Para corrigir isso, primeiro chame GetSystemMetrics para obter os seguintes valores:
  • SM_XVIRTUALSCREEN,
  • SM_YVIRTUALSCREEN,
  • SM_CXVIRTUALSCREEN e
  • SM_CYVIRTUALSCREEN.
Em seguida, para cada ponto retornado de GetMouseMovePointsEx, execute a seguinte transformação:
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 Valor
Cliente mínimo com suporte Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows 2000 Server [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho winuser.h (inclua Windows.h)
Biblioteca User32.lib
DLL User32.dll

Confira também

Conceitual

MOUSEMOVEPOINT

Entrada por mouse

Referência