본문 바로가기

무작정 따라해보기(정리, 문제풀기)/Win32API

19. WIN32API 프로그래밍 - 마우스 관련

728x90

 

'나우캠퍼스X아워즈팜'유튜브의 'Win32 API 6강. 키보드와 마우스, 타이머 (2/3)'영상을 보고 정리한 내용입니다.

 

마우스 관련 메시지


마우스도 컴퓨터의 주변 장치이기 때문에 운영체제가 먼저 감지를 하며 메시지 형태로 응용프로그램에 전달이 됩니다.

마우스를 움직이거나 클릭, 스크롤, 드래그할 수 있습니다. 이런 움직임이 전부 메시지로 전달이 됩니다.

 

WM_MOUSEMOVE

  • 마우스가 이동할 때 발생하는 메시지이다.
  • 부가적인 정보를 lPram에 담아오는데 lParam에 마우스 위치 정보(이동한 현재의 마우스 위치)가 담겨진다. x, y 좌표는 2바이트씩 잘라서 알아낼 수 있다.
    마우스의 x좌표 : LOWORD(lParam) -> (하위 2바이트)
    마우스의 y좌표 : HIWORD(lParam) -> (상위 2바이트)

 

그 외 마우스 메시지

  • WM_LBUTTONDOWN : 마우스 왼쪽 버튼 클릭
  • WM_LBUTTONUP : 마우스 왼쪽 버튼 놓임
  • WM_RBUTTONDOWN : 마우스 오른쪽 버튼 클릭
  • WM_RBUTTONUP : 마우스 오른쪽 버튼 놓임
  • 위와 같은 메시지들이 발생할 때마다 lParam에 마우스의 위치 정보가 들어온다.(WM_MOUSEMOVE 메시지와 마찬가지!)

 

마우스 드래그를 할 때

  • 왼쪽 버튼을 누른 상태에서 이동을 할 때 마우스는 드래그를 하고 있는 상태이다.(클릭된 상태에서 이동을 할 때)
  • 마우스가 이동(WM_MOUSEMOVE메시지가 발생)할 때 부가적인 정보를 담고 있는 wParam이 따로 있는데 마우스의 상태를 담고 있다. 마우스의 상태는 마우스 버튼 코드로 전달이 된다. 마우스 버튼 코드는 MK_LBUTTON, MK_MBUTTON, MK_RBUTTON, MK_CONTROL,MK_SHIFT 등이 있다.
  • WM_MOUSEMOVE 메시지가 발생하였고 wParam에 MK_LBUTTON이 있다면 드래그중인 상태이고 그렇지 않게 된다면 드래그를 하지 않고 있는 상태이다.

 

 

오류가 있다면 알려주시면 감사하겠습니다!