Programming
No. | 298 |
Name. | coolx |
Subject. | [API] 마우스 처리 #2 |
Main Cate. | Win32 |
Sub Cate. | |
Date. | 2006-07-20 09:45 |
Hit. | 4609 (220.76.115.27) |
File. | |
<< Mouse Event - Nonclient Range>> Mouse는 21개의 Message를 가지고 있다. 이중 11개는 클라이언트 영역과 관계가 없다. WM_NVMOUSEMOVE WM_NCLBUTTONDOWN, WM_NCLBUTTONUP, WM_NCLBUTTONDBLCLK WM_NCMBUTTONDOWN, WM_NCMBUTTONUP, WM_NCMBUTTONDBLCLK WM_NCRBUTTONDOWN, WM_NCRBUTTONUP, WM_NCRBUTTONDBLCLK wParam : 마우스가 움직이거나 눌려진 비클라이언트 영역 HT(Hit-Test)로 시작하는 식별자중의 하나로 설정 lParam : 하위 워드에 x, 상위 워드에 y좌표 화면 전체의 좌측 상단이 (0,0) 다음의 두개 함수로 화면 좌표를 클라이언트 영역 좌표로 변환 ScreenToClient(hwnd,pPoint); ClientToScreen(hwnd,pPoint); 이들 두 함수는 예전의 값을 보관하지 않고 POINT형식의 구조체 안에 저장된 값을 변환. << WM_NCHITTEST >> 21개의 마우스 메시지중에서 마지막 메시지. 다른 모든 클라이언트 영역과 비클라이언트 영역 마우스 메시지에 우선. lParam : 마우스의 x,y위치 wParam : 사용되지 않음 일반적으로 윈도우즈 작업은 이 메시지를 DefWindowProc에 전달하며, 윈도우즈는 WM_NCHITTEST 메시지를 마우스의 위치에 따라 다른 모든 마우스 메시지를 만드는데 사용. 비클라이언트 영역 마우스 메시지에서 WM_NCHITTEST를 처리할때 DefWindowProc에 되돌려진 값은 마우스 메시지의 wParam인자가 된다. 이 값은 비클라이언트 영역 마우스 메시지에 다음의 값을 더한 wParam 값의 어떤 것이 될 수 있다. HTCLIENT 클라이언트 영역 HTNOWHERE 어떤 윈도우도 아님 HTTRANSPARENT 다른 윈도우에 겹쳐진 윈도우 HTERROR DefWindowProc에 beep 소리를 나게 함 DefWindowProc가 WM_NCHITTEST메시지를 처리한 후 HTCLIENT를 되돌린다면, 윈도우즈는 화면 좌표를 클라이언트 영역 좌표로 변환하고 클라이언트 영역 마우스 메시지를 발생시킨다. 모든 마우스 메시지를 무력화시키는 방법 case WM_NCHITTEST: return (LRESULT) NTNOWHERE; << 마우스 Capture >> SetCapture(hwnd); 이 함수 호출 후에 윈도우즈는 핸들이 hwnd인 윈도우의 윈도우 프로시저에 모든 마우스 메시지를 보낸다. 마우스가 비클라이언트 영역에 있더라도 항상 클라이언트 영역 메시지를 보낸다. ReleaseCapture(); 로 제거할 수 있다. [바로가기 링크] : http://coolx.net/cboard/develop/298 |
|
|
|
[Modify] [Delete] | [Reply] [List] |