Mouse

API Reference 2007. 10. 17. 10:43

마우스 입력에 관한 메시지


( 버튼 )    ( 누름 )                       ( 놓음 )                   ( 더블클릭 )

  좌측       WM_LBUTTONDOWN     WM_LBUTTONUP     WM_LBUTTONDBLCLK

  우측       WM_RBUTTONDOWN     WM_RBUTTONUP    WM_RBUTTONDBLCLK

  중앙       WM_MBUTTONDOWN    WM_MBUTTONUP    WM_MBUTTONDBLCLK



마우스 메시지는 lParam 의 상위 워드에 마우스 버튼이 눌러진 y 좌표, 하위 워드에 x 좌표를 가지며 좌표값을 검출해 내기 위해 HIWORD, LOWORD 등의 매크로 함수를 사용한다.

즉 마우스 메시지가 발생한 위치의 좌표는 ( LOWORD( lParam ), HIWORD( lParam ) )이 된다.


wParam 에는 마우스 버튼의 상태와 키보드 조합 키( Shift, Ctrl )의 상태가 전달된다.

조합키의 상태는 다음 값들과 비트 연산을 해보면 알 수 있다. 이 값을 참조하면 쉬프트 클릭, 좌우 동시 누름 등의 조건을 검출할 수 있다.


MK_CONTROL

Ctrl 키가 눌러져 있다.


MK_LBUTTON

마우스 왼쪽 버튼이 눌러져 있다.


MK_RBUTTON

마우스 오른쪽 버튼이 눌러져 있다.


MK_MBUTTON

마우스 중간 버튼이 눌러져 있다.


MK_SHIFT

Shift 키가 눌러져 있다.



마우스 버튼의 누름 메시지 외에 마우스가 이동할 때마다 전달되는 WM_MOUSEMOVE 메시지가 있다.

이 메시지도 다른 마우스 메시지와 마찬가지로 lParam 에 마우스 커서의 위치가 전달되며 wParam 에 조합키 상태가 전달된다.



개별 정보를 분리해내는 매크로


#define LOWORD( l )    ( ( WORD )( l ) )

#define HIWORD( l )     ( ( WORD )( ( ( DWORD )( l ) >> 16 ) & 0xFFFF ) )

#define LOBYTE( w )   ( ( BYTE )( w ) )

#define HIBYTE( w )    ( ( BYTE )( ( ( WORD )( w ) >> 8 ) & oxFF ) )


DWORD 로부터 상, 하위 워드 추출, WORD 로부터 상, 하위 바이트를 추출하는 매크로들인데 캐스트 연산자, 비트 AND, 쉬프트 연산자들의 조합으로 값을 추출한다.



#define MAKEWORD( a, b )    ( ( WORD )( ( ( BYTE )( a ) ) | ( ( WORD )( ( BYTE )( b ) ) ) << 8 ) )

#define MAKELONG( a, b )    ( ( LONG )( ( ( WORD )( a ) ) | ( ( DWORD )( ( WORD )( b ) ) ) << 16 ) )


MAKEWORD 는 두 개의 바이트로부터 16비트값을 만들고

MAKELONG 은 두 개의 16비트 값으로 32비트값을 만든다.

이 외에 MAKELONG 과 똑같이 정의된 MAKEWPARAM, MAKELPARAM 매크로가 정의되어 있는데 메시지를 직접 보내고자 할 때 파라미터 조립에 가끔 사용된다.

예를 들어 ( 123, 98 ) 좌표를 lParam 에 실어 보내려면 MAKELPARAM( 123, 98 ) 매크로를 사용한다.

Posted by 명혀니
,