자기개발/MFC
C++(MFC) - SetCapture() GetCapture() ReleaseCapture()
pi92
2021. 9. 27. 13:14
SetCapture() GetCapture() ReleaseCapture() 메소드들은 마우스 이벤트를 헨들링 하기 위해 사용한다.
마우스가 영역 밖으로 이동했을 때 WM_MOUSEMOVE를 받고 싶을 때 사용한다.
SetCapture() 사용예
void C_ReviewWnd::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
//<<- 마우스 캡처
// : 마우스가 window 영역을 벗어나도 이벤트가 작동되게 하기 위함
SetCapture();
//r버튼시 현재 위치 저장
m_Rmove = point;
//r버튼클릭 활성화
m_Rflag = true;
CStatic::OnRButtonDown(nFlags, point);
}
GetCapture(), ReleaseCapture() 사용 예
void C_ReviewWnd::OnRButtonUp(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
//<<- 마우스 캡처가 자기자신이 아니면 return처리
if (GetCapture() != this) return;
//드래그시 움직인 거리 저장
m_moveDistance += m_moveDrag;
//드래그로 움직인 거리 초기화
m_moveDrag = 0;
//r버튼 클릭 비활성화
m_Rflag = false;
ReleaseCapture ();
CStatic::OnRButtonUp(nFlags, point);
}
ReleaseCapture() 사용 안하면 WM_MOUSEMOVE가 계속 활성화 하면서 호출한다.