GetMouseMovePointsEx 함수(winuser.h)

마우스 또는 펜의 이전 좌표 기록을 최대 64개까지 검색합니다.

구문

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

매개 변수

[in] cbSize

형식: UINT

MOUSEMOVEPOINT 구조체의 크기(바이트)입니다.

[in] lppt

형식: LPMOUSEMOVEPOINT

화면 좌표에서 유효한 마우스 좌표를 포함하는 MOUSEMOVEPOINT 구조체에 대한 포인터입니다. 타임스탬프를 포함할 수도 있습니다.

GetMouseMovePointsEx 함수는 마우스 좌표 기록의 지점을 검색합니다. 함수가 점을 찾으면 제공된 지점을 포함하기 전과 이전의 마지막 nBufPoint를 반환합니다 .

애플리케이션에서 타임스탬프를 제공하는 경우 GetMouseMovePointsEx 함수는 이를 사용하여 서로 다른 시간에 기록된 두 개의 동일한 지점을 구분합니다.

애플리케이션은 WM_MOUSEMOVE 메시지에서 받은 마우스 좌표를 사용하여 이 함수를 호출하고 화면 좌표로 변환해야 합니다.

[out] lpptBuf

형식: LPMOUSEMOVEPOINT

포인트를 받을 버퍼에 대한 포인터입니다. 크기는 적어도 cbSize* nBufPoints 여야 합니다.

[in] nBufPoints

형식: int

검색할 지점 수입니다.

[in] resolution

형식:DWORD

원하는 해상도입니다. 이 매개 변수는 다음 값 중 하나일 수 있습니다.

의미
GMMP_USE_DISPLAY_POINTS
1
디스플레이 해상도를 사용하여 지점을 검색합니다.
GMMP_USE_HIGH_RESOLUTION_POINTS
2
고해상도 지점을 검색합니다. x 좌표와 y 좌표 모두에서 점 범위는 0에서 65,535(0xFFFF)입니다. 이는 태블릿 그리기와 같은 절대 좌표 포인팅 디바이스에서 제공하는 해상도입니다.

반환 값

형식: int

함수가 성공하면 반환 값은 버퍼의 포인트 수입니다. 그렇지 않으면 함수는 –1을 반환합니다. 확장 오류 정보를 위해 애플리케이션에서 GetLastError를 호출할 수 있습니다.

설명

시스템은 마지막 64개의 마우스 좌표와 해당 타임스탬프를 유지합니다. 애플리케이션이 GetMouseMovePointsEx 에 마우스 좌표를 제공하고 좌표가 시스템의 마우스 좌표 기록에 있는 경우 함수는 시스템 기록에서 지정된 수의 좌표를 검색합니다. 기록에서 동일한 지점을 구분하는 데 사용되는 타임스탬프를 제공할 수도 있습니다.

GetMouseMovePointsEx 함수는 결국 호출 스레드뿐만 아니라 다른 스레드에도 디스패치된 지점을 반환합니다.

GetMouseMovePointsEx 는 다음 경우에 실패하거나 잘못된 값을 반환할 수 있습니다.

  • MOUSEMOVEPOINT 구조에서 음수 좌표가 전달되는 경우
  • GetMouseMovePointsEx가 음수 값으로 좌표를 검색하는 경우
이러한 상황은 여러 모니터가 있는 경우 발생할 수 있습니다. 이 문제를 해결하려면 먼저 GetSystemMetrics 를 호출하여 다음 값을 가져옵니다.
  • SM_XVIRTUALSCREEN
  • SM_YVIRTUALSCREEN
  • SM_CXVIRTUALSCREEN 및
  • SM_CYVIRTUALSCREEN.
그런 다음 GetMouseMovePointsEx에서 반환되는 각 지점에 대해 다음 변환을 수행합니다.
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 ;
   }
} 

요구 사항

요구 사항
지원되는 최소 클라이언트 Windows 2000 Professional[데스크톱 앱만]
지원되는 최소 서버 Windows 2000 Server[데스크톱 앱만]
대상 플랫폼 Windows
헤더 winuser.h(Windows.h 포함)
라이브러리 User32.lib
DLL User32.dll

추가 정보

개념

MOUSEMOVEPOINT

마우스 입력

참조