티스토리 뷰
- 마우스관련 이벤트에서 마우스포인터 좌표 (X, Y)
X = HIWORD(lParam)
Y = LOWORD(lParam)
- 클릭 상태와 키보드 조합 wParam
MK_LBUTTON, MK_RBUTTON, MK_MBUTTON,
MK_CONTROL Ctrl 키 눌림
MK_SHIFT Shift 키 눌림
- 클라이언트 영역(View) 에서는 WM_LBUTTONDOWN 이벤트 발생하고
비 클라이언트 영역(Frame) 에서는 WM_NCLBUTTONDOWN 이벤트로 메시지가 틀리다.
- 더블클릭 이벤트
이용하려면 윈도우 클래스 스타일에 WNDCLASS.style |= CS_DBLCLKS 추가해야한다.
- 마우스 캡쳐
마우스 버튼이 눌린채 윈도우 영역을 벗어나 이동했을 경우 그 위치를 알내는 것
마우스 버튼을 누르고 있는 상황에서만 유효하고, 떼면 무효화 된다.
HWND SetCapture(HWND hWnd)
case WM_LBUTTONDOWN:
SetCapture(hWnd);
...
break;
case WM_LBUTTONUP:
ReleaseCapture();
...
break;
case WM_MOSEMOVE:
if(GetCapture() == hWnd) {
int X = LOWORD(lParam);
int Y = HIWORD(lParam);
wsprintf(str, TEXT("좌표 : %d, %d, 키보즈 조합 : %d"), X, Y, wParam);
InvalidateRect(hWnd, NULL, TRUE); // WM_PAINT 메시지 발생
}
break;
case WM_PAINT:
RECT rect;
PAINTSTRUCT ps;
HDC hdc = BeginPaint(hWnd, &ps);
GetWindowRect(hWnd, &rect);
SetTextAlign(hdc, TA_CENTER);
TextOut(hdc, (rc.right-rc.left)/2, (rc.bottom-rc.top)/2, str, wcslen(str));
EndPaint(hWnd, &ps);
break;