마우스 캡쳐 : WM_LBUTTONDOWN에서 SetCapture()
현재 어떤 윈도우가 캡쳐되었는지 : GetCapture()
↪ 마우스 캡쳐 시엔, WM_NCHITTEST 메시지는 발생하지 않는다.
마우스 캡쳐 해제 : WM_LBUTTONUP (다른 윈도우 클릭) OR ReleaseCapture()
1) 마우스 캡쳐
SetCapture(hwnd);
static POINTS start, end;
switch(msg)
{
case WM_LBUTTONDOWN:
{
start = end = MAKEPOINTS(lParam);
SetCapture(hwnd);
return 0;
}
}
시작점 start과 끝점 end을 선언한다.
클라이언트 영역을 좌 클릭했을 때, start와 end는 같은 위치에 있다.
그 시점에서 마우스 캡쳐 발생한다. ⇒ SetCapture(hwnd);
2) 누가 마우스를 캡쳐하고 있는지
GetCapture()
case WM_MOUSEMOVE:
{
if(GetCapture() == hwnd)
{
HDC hdc = GetDC(hwnd);
SetROP2(hdc, R2_NOT);
// 지우는 역할
MoveToEx(hdc, start.x, start.y, NULL);
LineTo(hdc, end.x, end.y);
end = MAKEPOINTS(lParam);
//그리는 역할
MoveToEx(hdc, start.x, start.y, NULL);
LineTo(hdc, end.x, end.y);
ReleaseDC(hwnd, hdc);
}
return 0;
}
SetROP2(hdc, R2_NOT); : 그리기 모드 설정
↪ 서로 같은 것을 만나면 TRUE → 투명해짐
↪ 서로 다른 것을 만나면 FALSE → 그려짐
MoveToEx(hdc, start.x, start.y, NULL);
↪ 시작할 위치
LineTo(hdc, end.x, end.y);
↪ 끝낼 위치
3) 마우스 캡쳐 해제
ReleaseCapture()
case WM_LBUTTONUP:
{
ReleaseCapture();
return 0;
}