티스토리 뷰

프로그래밍/API

마우스

에어버스 2016. 4. 24. 11:22

- 마우스관련 이벤트에서 마우스포인터 좌표 (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;

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31