본문 바로가기

공부/MFC

Visual C++ 2008 MFC Chapter 6 마우스 입력 - 3

드래그로 출력된 텍스트를 이동시키는 코드를 짜보자.

짠 코드들만 나열하면 다음과 같다. 


MouseCombiView.h 에서 바뀐 내역.

#pragma once


class CMouseCombiView : public CView
{
protected: // serialization에서만 만들어집니다.
CMouseCombiView();
DECLARE_DYNCREATE(CMouseCombiView)

// 특성입니다.
public:
CMouseCombiDoc* GetDocument() const;

// 작업입니다.
public:
CPoint m_ptItemText;//특정 아이템 텍스트의 좌표
bool m_bDragFlag; //드래그가 시작됨을 알리는 플래그.
 
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

아래 코드들은 모두 메시지 핸들러로 작성해야만 대체적으로 오류가 없이 작성된다.

이미 쓰여있는 코드에 추가하여 작성되는 코드도 있으니 잘 구별해야 한다. 

 
[이 부분은 이미 있는 코드에 추가한 내용이다.]
CMouseCombiView::CMouseCombiView()
{

//CMouseCombiView 생성/소멸

m_ptItemText = CPoint(10,30);
m_bDragFlag = false;//드래그 중이 아님

}


////////////////////////////////////////////////

 

void CMouseCombiView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.

//m_ptItemText값을 기준으로 64픽셀 이내에서 마우스 왼쪽 버튼이 클릭된 것인가? 라는 조건문.

if(point.x >= m_ptItemText.x - 32 &&
point.x <= m_ptItemText.x + 32 &&
point.y >= m_ptItemText.y - 32 &&
point.y <= m_ptItemText.y + 32)
{
m_bDragFlag = true;
RedrawWindow();
}

CView::OnLButtonDown(nFlags, point);
}


//////////////////////////////////////////


void CMouseCombiView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
//드래그 중이었는가?
if(m_bDragFlag)
{
//버튼에서 손을 뗐으므로 드래그가 끝났다고 판단한다[값을 다시 바꾸어준다.]
m_bDragFlag = false;
RedrawWindow();

}


CView::OnLButtonUp(nFlags, point);
}


/////////////////////////////////////////////


void CMouseCombiView::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
if(m_bDragFlag)
{
//드래그 중인 좌표로 아이템 텍스트를 이동시켜 출력한다.
m_ptItemText = point;
RedrawWindow();
}

CView::OnMouseMove(nFlags, point);
}


////////////////////////////////////////////////

void CMouseCombiView::OnPaint()
{
CPaintDC dc(this); // device context for painting
// TODO: 여기에 메시지 처리기 코드를 추가합니다.
// 그리기 메시지에 대해서는 CView::OnPaint()을(를) 호출하지 마십시오.

if(m_bDragFlag) dc.TextOutW(10,10,TEXT("DRAG"));
else dc.TextOutW(10,10,TEXT("----"));

dc.TextOutW(m_ptItemText.x, m_ptItemText.y, TEXT("내 컴퓨터"));


}


///////////////////////////////////////////////
출력화면 

 
내컴퓨터 라는 텍스트의 일정 부분을 드래그 하면 드래그 도중에 밑줄 부분에 DRAG라는 문구가 생기며 위치가 이동된다.
 

 

여기까지의 코드