본문 바로가기
프로그래밍/MFC

MFC-마우스 입력

by 리뷰하는 (게임)프로그래머_리프TV 2010. 5. 16.


MFC에서 마우스 입력에 대해서 알아보자.

기존의 API의 WM_MOUSEMOVE라던가, WM_LBUTTONDOWN등을 mfc에서는 그대로 함수를 추가해 하면된다.

특별히 달라진건 존재 하지 않는거 같다.

예제를 통해서 하나씩 살펴보자.

View에서 WM_MOUSEMOVE를 추가 하게 되면 마우스가 이동할 때 마다

OnMouseMove() 함수에 들르게 된다.

UINT 타입의 nFlags와, CPoint를 인자로 받아 오게 되는데,

nFlags는 현재 마우스 입력( 버튼 클릭 )에 대해서

CPoint는 마우스의 X,Y좌표를 가지고 있다.


	if( (nFlags & MK_LBUTTON) == MK_LBUTTON &&
		(nFlags & MK_RBUTTON) == MK_RBUTTON )
	{
		m_ptMouse = point;
		RedrawWindow();
	}
	CView::OnMouseMove(nFlags, point);​


소스를 보면 nFlags를 비트연산(&)을 사용해 마우스 왼쪽 버튼이 눌렸는지 확인하고 있다.
마찬가지로 마우스 오른쪽 버튼도 눌렸는지 확인 하고 있다.

m_ptMouse는 View클래스에 존재하는 CPoint변수이다.
설명하자면 마우스 왼쪽 버튼과 오른쪽 버튼이 모두 눌려 있다면 현재 x,y좌표를 m_ptMouse 변수에 대입 한다고 볼 수 있다.
대입 후 RedrawWindow를 통해 윈도우의 화면을 갱신해 준다.
예상 대로라면 m_ptMouse는 마우스 오른쪽 버튼과 왼쪽 버튼이 눌린채로 이동하면 현재 x,y좌표를 지속적으로 갱신, 기억 할 것이다.

실행 결과는 잠깐 확인을 미루고, 다음으로
WM_MOUSEWHEEL을 추가해 보자.
OnMouseWheel()로 생성하면, OnMouseMove와 비슷한 인자값을 받아 오지만 중간에,
short zDelta를 추가로 받아 온다.
zDelta는 휠이 움직였을 때 값이 삽입 되는데,
이론상으론 -480 ~ +480 까지라고 하며, 이동 시 120단위로 이동하게 된다.

	Delta = zDelta;
	RedrawWindow();

	return CView::OnMouseWheel(nFlags, zDelta, pt);​


이전과 비슷하다, 휠이 움직일때 마다 Delta라는 View에 존재하는 short 멤버 변수에 zDelta 값을 대입해 준다.

마지막으로 WM_PAINT를 생성하여,

	CString strData = _T("");
	strData.Format( _T("X:%03d, Y:%03d"), m_ptMouse.x, m_ptMouse.y );
	
	dc.TextOut( 10, 10, strData );

	strData.Format( _T("zDelta : %d"), Delta );

	dc.TextOut( 10, 30, strData );​


처럼 코드를 작성하면,
휠을 움직이거나, 마우스 왼쪽, 오른쪽 버튼을 누르고 마우스를 움직이면 화면에 그 값들을 출력할 것이다.

// 실행 결과

'프로그래밍 > MFC' 카테고리의 다른 글

MFC-새로운 클래스 추가 하기  (0) 2010.05.16
MFC-마우스입력( 드래그 & 드랍 )  (0) 2010.05.16
MFC-GetKeyState()  (0) 2010.05.12
MFC-GetWindowRect(), ScreenToClient(), SetWindowPos()  (1) 2010.05.12
MFC-키보드 입력  (0) 2010.05.12