프로그래밍/API

마우스 유무 버튼개수 확인

에어버스 2016. 1. 31. 12:08

GetSystemMetrics(SM_MOUSEPRESENT);
마우스가 있으면 TRUE

GetSystemMetrics(SM_MOUSEBUTTONS);
마우스 버튼의 술르 리턴, 마우스가 없으며 0

마우스 동작
마우스 관련 메시지는 클라이언트 영역 뿐 아니라 비 클라이언트 영역(제목, 메뉴, 스크롤바)에서 움직이는 마우스 메시지를 보두 받지만, 시스템 모달 메시지 상자나 대화상자가 나타나면 메시지를 받지 못한다. 
마우스 관련 메시지(WM_LBUTTONDOWN 등)는
lParam : 마우스 포인터 위치값, x = LWORD(lParam), y = HIWORD(lParam)
wParam : 마우스 단추와 Shift, Ctrl키의 상태값 을 가진다
MK_LBUTTON : 마우스 왼쪽 버튼 눌림, MK_MBUTTON, MK_RBUTTON
MK_SHIFT : Shift 키 눌림
MK_CONTROL : Ctrl 키 눌림

- 더블클릭 메시지를 받으려면 윈도우 스타일에 CS_DBLCLKS 를 추가 해야 한다
wcex.style          = CS_HREDRAW | CS_VREDRAW | CS_DBLCLKS;

비클라이언트 영역의 메시지는 NC 가 붙어 WM_NCLBUTTONDOWN 가 되고 이때 받는 좌표는 윈도우(화면) 좌표가 된다.
ScreenToClient(hWnd, strctPoint); // 화면 좌표 -> 클라이언트 영역 좌표로 변환 
ClientToScreen(hWnd, strctPoint);