드래그로 출력된 텍스트를 이동시키는 코드를 짜보자.
짠 코드들만 나열하면 다음과 같다.
MouseCombiView.h 에서 바뀐 내역.
\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
아래 코드들은 모두 메시지 핸들러로 작성해야만 대체적으로 오류가 없이 작성된다.
이미 쓰여있는 코드에 추가하여 작성되는 코드도 있으니 잘 구별해야 한다.
////////////////////////////////////////////////
//////////////////////////////////////////
/////////////////////////////////////////////
////////////////////////////////////////////////
///////////////////////////////////////////////
출력화면
내컴퓨터 라는 텍스트의 일정 부분을 드래그 하면 드래그 도중에 밑줄 부분에 DRAG라는 문구가 생기며 위치가 이동된다.
여기까지의 코드
짠 코드들만 나열하면 다음과 같다.
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라는 문구가 생기며 위치가 이동된다.
여기까지의 코드
'공부 > MFC' 카테고리의 다른 글
Visual C++ 2008 MFC Chapter 7 GDI - 2 (0) | 2011.12.01 |
---|---|
Visual C++ 2008 MFC Chapter 7 GDI - 1 (0) | 2011.12.01 |
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 2 (0) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 6 마우스 입력 - 1 (0) | 2011.11.30 |
Visual C++ 2008 MFC Chapter 5 의 실습예제 (1) | 2011.11.30 |