자기개발/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가 계속 활성화 하면서 호출한다.