2013-12-09 6 views
0

WM_MOUSEMOVE 메시지를 캡처하여 내 창의 커서 움직임을 감지 할 수 있습니다. 이 메시지에는 x 및 y 좌표가 포함되어 있지만 사용자가 마우스를 가로 또는 세로로 이동하려고했는지 여부를 파악할 필요가 있습니다. x 좌표가 y보다 크게 변경되면 수직 이동을 무시하고 싶습니다. 다른 메시지를 사용해야합니까? 감사!마우스가 수평으로 움직 였는지 여부 확인 (C++)

+0

Windows에 특정 태그가 다시 붙습니다. C++은 마우스에 상관하지 않습니다. C++은 마우스가 있는지를 모릅니다. –

+3

마지막 mousemove 이벤트를 추적하여 두 이벤트를 비교할 수 있어야합니다. 그리고 당신은 당신이 의미하는 바를 "더 많이"더 분명하게해야합니다. 컴퓨터에 실제 번호를 제공 할 수 있어야합니다. –

답변

4

데이빗 (David)이 맞습니다. 상태를 계속 추적해야 할 것 같습니다. 그러나 마우스의 최대 64 이전 좌표를 제공하는 함수, GetMouseMovePointsEx이 있습니다. 좌표를 저장하기 위해서는지도 (또는 다른 데이터 구조)가 있어야하지만,이 함수는 많은 도움이됩니다. 그리고 다시, 나는 그 방법이 더 수동 방법과 비교하여 얼마나 큰지를 알지 못한다. 어디에서 마우스가 시작 되었는가? * (아래 편집 참조)

일단 이전 좌표가 있으면 시작 위치를 최신 위치와 비교할 수 있습니다. 차이가 임의의 양 (결정한 것)보다 큰 경우 코드를 실행하십시오.

* 편집 : 그냥 내가 역사를 마우스 좌표에

위의 점에 대한 GetMouseMovePointsEx 기능 검색을 링크 GetMouseMovePointsEx 문서에이 글을 읽을. 함수가 포인트를 찾으면 마지막 포인트 인 nBufPoints를 으로 반환합니다.

응용 프로그램에서 타임 스탬프를 제공하는 경우 GetMouseMovePointsEx 함수는이를 사용하여 이 다른 시간에 기록 된 두 개의 동일한 점을 구별합니다.

응용 프로그램은 WM_MOUSEMOVE 메시지에서받은 마우스 좌표를 사용하여이 함수를 호출하고 화면 좌표로 변환해야합니다.

+1

+1이 기능에 대해 전혀 알지 못했습니다. 여기가 유용 할 것 같네요. –

+0

모자, 나는 마지막 마우스 이벤트가 생성 된 이후 "움직임의 양"을 추적하는 것으로 보이는 MOUSEINPUT 구조체를보고 있습니다. 꽤 복잡해 보입니다. :) – IgorAtman

+0

@IgorAtman, 제 편집 참조. MOUSEINPUT도보고 있습니다. 궁극적으로 어느 솔루션이 더 간단한 지 확실하지 않습니다. 나는 때때로 이러한 것들은 광범위한 기능을 가지고 있기 때문에 때때로 더 복잡해 보임을 알고있다. 때로는 사용 가능한 기능 중 단 하나만 사용하는 것은 꽤 간단하다. – caps