-----view.cpp
void CMouseMsgView::OnDraw(CDC* pDC)
{
CMouseMsgDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
pDC->TextOut(100, 100, _T("안녕하세요")); // _T : char, wchar_t 구별하지 않고 사용하기 위해
}
-----view.cpp
void CMouseMsgView::OnDraw(CDC* pDC)
{
CMouseMsgDoc* pDoc = GetDocument(); // Doc.h에 정의된 내용 가져오는 함수
ASSERT_VALID(pDoc);
if (!pDoc)
return;
// TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다.
pDC->TextOut(pDoc->m_x, pDoc->m_y, pDoc->m_strText);
}
-----doc.h
// 특성입니다.
public:
int m_x;
int m_y;
CString m_strText;
-----doc.cpp
BOOL CMouseMsgDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
// TODO: 여기에 재초기화 코드를 추가합니다.
// SDI 문서는 이 문서를 다시 사용합니다.
m_x = 100;
m_y = 100;
m_strText = _T("안녕하세요");
return TRUE;
}
-----view.cpp
void CMouseMsgView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
Invalidate(); // 현재 화면을 다시 그려라
// WM_PAINT 메세지가 현재 나의 윈도우에 전달됨 -> OnDraw() 호출
CView::OnLButtonDown(nFlags, point);
}
문구를 옮긴 후, 해당 변경사항을 파악하여 윈도우를 닫을 때 저장문구 보이게 하기
-----view.cpp
void CMouseMsgView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
pDoc->SetModifiedFlag(); //문서가 수정되었다고 설정됨
Invalidate(); // 현재 화면을 다시 그려라
// WM_PAINT 메세지가 현재 나의 윈도우에 전달됨 -> OnDraw() 호출
// RedrawWindow();와 같은 기능
CView::OnLButtonDown(nFlags, point);
}
저장하는 문구가 나타나게 됨
// CMouseMsgDoc serialization
void CMouseMsgDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring()) // 저장
{
// TODO: 여기에 저장 코드를 추가합니다.
ar << m_x;
ar << m_y;
ar << m_strText;
}
else // 불러오기
{
// TODO: 여기에 로딩 코드를 추가합니다.
ar >> m_x;
ar >> m_y;
ar >> m_strText;
}
}
코드 변경 후 해당 파일 내용 확인
코드 실행 후 '열기'해서 해당 파일 열면, 저장한 내용으로 출력됨
기본 세팅 값
해당 내용 저장 후 데이터 확인
데이터 해석
void CMouseMsgView::OnMouseMove(UINT nFlags, CPoint point)
{
if ((nFlags & MK_LBUTTON) == MK_LBUTTON) { // 왼쪽 마우스 눌러진 상탱에서 움직임
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
pDoc->SetModifiedFlag(); //문서가 수정되었다고 설정됨
Invalidate();
}
CView::OnMouseMove(nFlags, point);
}
다른 버튼 누른 상태여도 왼쪽 버튼만 누르고 있으면 문구가 따라니게 됨
nFlags를 모를 때, 변수를 하나 만들어서 해당 플로우 만들기
특징
-----view.h
// 특성입니다.
public:
CMouseMsgDoc* GetDocument() const;
bool m_bMouseDown; // 변수 선언
해당 함수 추가하기
-----view.cpp
// CMouseMsgView 생성/소멸
CMouseMsgView::CMouseMsgView() noexcept
{
// TODO: 여기에 생성 코드를 추가합니다.
m_bMouseDown = false;
}
///////////////
void CMouseMsgView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
pDoc->SetModifiedFlag(); //문서가 수정되었다고 설정됨
Invalidate(); // 현재 화면을 다시 그려라
// WM_PAINT 메세지가 현재 나의 윈도우에 전달됨 -> OnDraw() 호출
// RedrawWindow();와 같은 기능
m_bMouseDown = true;
CView::OnLButtonDown(nFlags, point);
}
void CMouseMsgView::OnMouseMove(UINT nFlags, CPoint point)
{
// if ((nFlags & MK_LBUTTON) == MK_LBUTTON) { // 왼쪽 마우스 눌러진 상탱에서 움직임
if(m_bMouseDown) {
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
pDoc->SetModifiedFlag(); //문서가 수정되었다고 설정됨
Invalidate();
}
CView::OnMouseMove(nFlags, point);
}
void CMouseMsgView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
m_bMouseDown = false;
CView::OnLButtonUp(nFlags, point);
}
해당 윈도우 밖으로 벗어나도 해당 문구가 마우스 좌표로 따라 오게 만들기
-----view.h
void CMouseMsgView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
pDoc->SetModifiedFlag(); //문서가 수정되었다고 설정됨
Invalidate(); // 현재 화면을 다시 그려라
// WM_PAINT 메세지가 현재 나의 윈도우에 전달됨 -> OnDraw() 호출
// RedrawWindow();와 같은 기능
m_bMouseDown = true;
SetCapture(); // 윈도우 밖으로 나가도 마우스 좌표를 계속 따라다님
CView::OnLButtonDown(nFlags, point);
}
void CMouseMsgView::OnMouseMove(UINT nFlags, CPoint point)
{
//if ((nFlags & MK_LBUTTON) == MK_LBUTTON) { // 왼쪽 마우스 눌러진 상탱에서 움직임
if(m_bMouseDown) {
CMouseMsgDoc* pDoc = GetDocument();
pDoc->m_x = point.x;
pDoc->m_y = point.y;
pDoc->SetModifiedFlag(); //문서가 수정되었다고 설정됨
TRACE("%d %d\n", point.x, point.y); // 디버깅 상황에서 출력
Invalidate();
}
CView::OnMouseMove(nFlags, point);
}
void CMouseMsgView::OnLButtonUp(UINT nFlags, CPoint point)
{
// TODO: 여기에 메시지 처리기 코드를 추가 및/또는 기본값을 호출합니다.
m_bMouseDown = false;
ReleaseCapture(); // 마우스 좌표를 따라다니는 것을 풀어줌
CView::OnLButtonUp(nFlags, point);
}