마우스 입력 관련 챕터.
MouseMsgView.h 의 코드에서 public에 마지막 코드 추가
\\\\\\\\\\\\\\\\\\\\\\\\\\
MouseMsgView.cpp
에서는 아래 주석 앞의 부분이 추가되었다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\
다음으로는 CMouseMsgView 의 속성으로 가서 WM_PAINT를 추가하여 자동 코드 입력이 되게 한 후에
다음 과 같이 코딩한다.
}
\\\\\\\\\\\\\\\\\\\\\\\\\\
여기까지 입력하면 이런 화면이 뜬다
여기서 x와 y값은 아직 변하질 않는다.
여기에서 다시 CMouseMsgView 속성으로 가서 WM_MOUSEMOVE 를 추가한 후에
다음과 같이 코딩하면 마우스의 위치에 따라 x와 y값이 변하게된다.
=========================
출력화면
여기서 계속 값이 바뀌지 않고
마우스 왼쪽과 오른쪽 버튼을 동시에 누른채로 이동해야만 해당 값이 변경되어 출력되게 하려면
라고 코딩을 바꾸어 주면 된다.
같은 방법으로
OnRButtonDown과 m_ptRight
OnLButtonDown과 m_ptLeft 를 추가할 수 있다.
가장 중요한 코드인 onPaint() 를 적으면 아래와 같다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
MouseMsgView.h 의 코드에서 public에 마지막 코드 추가
// MouseMsgView.h : CMouseMsgView 클래스의 인터페이스
//
#pragma once
class CMouseMsgView : public CView
{
protected: // serialization에서만 만들어집니다.
CMouseMsgView();
DECLARE_DYNCREATE(CMouseMsgView)
// 특성입니다.
public:
CMouseMsgDoc* GetDocument() const;
// 작업입니다.
public:
CPoint m_ptMouse; //마우스 포인터의 좌표 << 이 부분이 추가되었다.\\\\\\\\\\\\\\\\\\\\\\\\\\
MouseMsgView.cpp
에서는 아래 주석 앞의 부분이 추가되었다.
CMouseMsgView::CMouseMsgView()
{
// TODO: 여기에 생성 코드를 추가합니다.
m_ptMouse = CPoint(0,0); // 이 부분이 추가되었다.
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\
다음으로는 CMouseMsgView 의 속성으로 가서 WM_PAINT를 추가하여 자동 코드 입력이 되게 한 후에
다음 과 같이 코딩한다.
void CMouseMsgView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
CString strData = _T("");
strData.Format(_T("X:%03d, Y:%03d"), m_ptMouse.x, m_ptMouse.y);
dc.TextOut(10,10,strData);
}
여기까지 입력하면 이런 화면이 뜬다
여기서 x와 y값은 아직 변하질 않는다.
여기에서 다시 CMouseMsgView 속성으로 가서 WM_MOUSEMOVE 를 추가한 후에
다음과 같이 코딩하면 마우스의 위치에 따라 x와 y값이 변하게된다.
void CMouseMsgView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
m_ptMouse = point;
RedrawWindow();
CView::OnMouseMove(nFlags, point);
}
=========================
출력화면
여기서 계속 값이 바뀌지 않고
마우스 왼쪽과 오른쪽 버튼을 동시에 누른채로 이동해야만 해당 값이 변경되어 출력되게 하려면
void CMouseMsgView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
if((nFlags & MK_LBUTTON) == MK_LBUTTON &&
(nFlags & MK_RBUTTON) == MK_RBUTTON)
{//마우스 양 버튼을 클릭한 상태에서 마우스를 움직이면 해당 위치를 받아 값을 변경하고 윈도우를 다시 그리게 한다.
m_ptMouse = point;
RedrawWindow();
}
CView::OnMouseMove(nFlags, point);
}
라고 코딩을 바꾸어 주면 된다.
같은 방법으로
OnRButtonDown과 m_ptRight
OnLButtonDown과 m_ptLeft 를 추가할 수 있다.
가장 중요한 코드인 onPaint() 를 적으면 아래와 같다.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
void CMouseMsgView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.
CString strData = _T("");
//WM_MOUSEMOVE
strData.Format(_T("X:%03d, Y:%03d"), m_ptMouse.x, m_ptMouse.y);
dc.TextOut(10,10,strData);
//WM_LBUTTONDOWN
strData.Format(_T("WM_LBUTTONDOWN X:%03d, Y:%03d"), m_ptLeft.x, m_ptLeft.y);
dc.TextOutW(10,30,strData);
//WM_RBUTTONDOWN
strData.Format(_T("WM_RBUTTONDOWN X:%03d, Y:%03d"), m_ptRight.x, m_ptRight.x);
dc.TextOutW(10,50,strData);
}
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
여기에 또 속성 을 통해 마우스 휠의 사용에 따른 메시지를 받아 출력하는 코드를 넣는다.
불친절한 글!
\\\\\\\\\\\\\\\\\\\
이 코드에서는 TRACE를 사용하였기 때문에 화면에 출력은 되지 않는다.
출력되는 값을 보려면 아래와 같이 디버그 실행-> 우하단 화면에서의 출력 선택 을 하면 휠의 사용방향에 따라 +120이나 -120 이 출력됨을 알 수 있다. (빨리 돌리면 좀 더 높은 값이 나오기도 한다)
출력화면..........
여기까지의 코딩 완료 파일.
\\\\\\\\\\\\\\\\\\\\\\
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
여기에 또 속성 을 통해 마우스 휠의 사용에 따른 메시지를 받아 출력하는 코드를 넣는다.
불친절한 글!
BOOL CMouseMsgView::OnMouseWheel(UINT nFlags, short zDelta, CPoint pt)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CString strTmp = _T("");
//WM_MOUSEMOVE
strTmp.Format(TEXT("OnMouseWheel() zDelta : %d\n"), zDelta);
TRACE(strTmp);
return CView::OnMouseWheel(nFlags, zDelta, pt);
}
\\\\\\\\\\\\\\\\\\\
이 코드에서는 TRACE를 사용하였기 때문에 화면에 출력은 되지 않는다.
출력되는 값을 보려면 아래와 같이 디버그 실행-> 우하단 화면에서의 출력 선택 을 하면 휠의 사용방향에 따라 +120이나 -120 이 출력됨을 알 수 있다. (빨리 돌리면 좀 더 높은 값이 나오기도 한다)
출력화면..........
여기까지의 코딩 완료 파일.
\\\\\\\\\\\\\\\\\\\\\\
'공부 > MFC' 카테고리의 다른 글
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 3 (4) | 2011.11.30 |
---|---|
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 2 (0) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 5 의 실습예제 (1) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 5 (0) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 3 (0) | 2011.11.29 |