본문 바로가기

MFC

[MFC]XOR 모드를 사용하여 선택 영역 그리기

XOR 모드는 두 번 그리면 원래 상태로 돌아가기 때문에 선택 영역을 지우고 다시 그리기.

 

과정

 

프로젝트 - 클래스마법사 - 클래스 이름 : (해당클래스Dlg) - 메시지

 

WM_LBUTTONDOWN

WM_LBUTTONUP

WM_MOUSEMOVE

추가.

 

 

해당클래스.h 에

CPoint m_ptStart;

CPoint   m_ptEnd;
bool  m_bDragging;

추가.

 

 

해당클래스.cpp에

 

void CMyView::OnLButtonDown(UINT nFlags, CPoint point)
{
      m_ptStart = point;
      m_ptEnd = point;  //이게 없으면 최초 클릭시 좌표(0,0)에서 사각형 나옴 ㅎ
      m_bDragging = true;

      SetCapture();

}

void CMyView::OnMouseMove(UINT nFlags, CPoint point)
{
      if (m_bDragging)
      {
            CClientDC dc(this);
            dc.SetROP2(R2_NOTXORPEN);        // 이전 사각형을 지움    
            dc.Rectangle(CRect(m_ptStart, m_ptEnd));        // 새로운 사각형을 그림      
            m_ptEnd = point;
            dc.Rectangle(CRect(m_ptStart, m_ptEnd));
      }   
      CView::OnMouseMove(nFlags, point);
}

 

void CMyView::OnLButtonUp(UINT nFlags, CPoint point)
{
      if (m_bDragging)
      {
            CClientDC dc(this);
            dc.SetROP2(R2_NOTXORPEN);
            // 마지막 사각형을 지움     
            dc.Rectangle(CRect(m_ptStart, m_ptEnd));
            m_ptEnd = point;
            m_bDragging = false;
            ReleaseCapture();
            Invalidate(FALSE);
      }   
      CView::OnLButtonUp(nFlags, point);
}

 

 

//와 진짜 성의없게 적었다... ㅈㅅ;