MFC 마우스 이벤트 처리 관련 질문입니다.
조회수 98회
WM_LBUTTONDOWN, WM_MOUSEMOVE, WM_RBUTTONDOWN 등 모든 마우스 이벤트 처리할 때 동일한 위치라면 이벤트가 발생한 마우스의 좌표 값이 같은데
WM_MOUSEWHEEL 만 이벤트가 발생한 마우스의 좌표가 다르네요. 왜 그런지 궁금합니다.
클릭이벤트
void CPr2View::OnLButtonDown(UINT nFlags, CPoint point)
{
m_strPointText.Format(_T("%d %d "), point.x, point.y);
OutputDebugString(m_strPointText);
Invalidate();
CView::OnLButtonDown(nFlags, point);
}
휠 이벤트
BOOL CPr2View::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
if (zDelta < 0)
{
m_strPointText.Format(_T("%d %d "), pt.x, pt.y);
OutputDebugString(m_strPointText);
}
else
{
m_strPointText.Format(_T("%d %d "), pt.x, pt.y);
OutputDebugString(m_strPointText);
}
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
결과는 실행된 창에 동일한 위치에서 좌클릭, 휠을 움직였을때 (49, 617) (267, 902) 로 좌표값이 다르게 나옵니다.
동일하게 우클릭, 마우스 이동 등 휠 이벤트를 제외한 나머지는 모두 (49, 617)로 좌클릭했을 때와 동일한 좌표가 나왔습니다.
또 이 좌표 값을 동일하게 맞추려면 어떻게 해야 할까요?
1 답변
-
OnLButtonDown(UINT nFlags, CPoint point)
의 point는 클라이언트 영역에서의 좌표이고,BOOL CPr2View::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
에서 pt는 스크린(모니터) 절대 좌표입니다.BOOL CPr2View::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
함수의 첫번째 줄에 아래의 한줄을 추가해 주시면 스크린 좌표를 클라이언트 좌표로 바꾸어 주고 동일한 좌표값을 볼수 있습니다.ScreenToClient(&pt);
댓글 입력