윈도우즈와 같은 GUI운영체제에서는 키보드보다 마우스가 더 많이 사용된다. 윈도우즈의 공식 입력 장치는 키보드이지만 그래픽 툴이나 DTP, CAD 등의 복잡한 프로그램에서는 마우스가 주요 입력 장치로 사용된다. 여기서 마우스라고 함은 진짜 쥐새끼처럼 생긴 마우스는 물론이고 노트북의 터치패드, 트랙볼과 출판용 타블릿 등을 모두 포함하는 명칭이다. 키보드 입력 처리를 메시지로 하는 것과 마찬가지로 마우스 입력 처리도 메시지를 받아 처리한다. 마우스 입력에 관한 메시지는 다음과 같은 종류가 있다.
버튼 | 누름 | 놓음 | 더블클릭 |
좌측 | WM_LBUTTONDOWN | WM_LBUTTONUP | WM_LBUTTONDBLCLK |
우측 | WM_RBUTTONDOWN | WM_RBUTTONUP | WM_RBUTTONDBLCLK |
중앙 | WM_MBUTTONDOWN | WM_MBUTTONUP | WM_MBUTTONDBLCLK |
버튼 세 개에 각각 누름, 놓음, 더블 클릭의 9가지 메시지가 있다. 이 중 중앙 버튼은 실질적으로 거의 사용되지 않으며 주로 왼쪽 버튼의 메시지가 많이 사용된다.
마우스 메시지는 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에 조합키 상태가 전달된다.
'Windows > Windows API' 카테고리의 다른 글
콜백함수 (CALLBACK) (0) | 2013.10.01 |
---|---|
타이머 (Timer) (0) | 2013.10.01 |
마우스 입력 (Mouse Input) (0) | 2013.10.01 |
WM_KEYDOWN (0) | 2013.10.01 |
버츄얼 키코드(virtual key code) (0) | 2013.10.01 |