[MFC] Shape

Posted by seunggwon
2008. 11. 24. 14:32 IT Note/기타언어

크기가 일정한 사각형 또는 타원 하나를 화면에 항상 출력하는  프로그램
왼쪽 마우스 클릭 :  사각형의 중심 위치 바뀜
오른쪽 마우스 클릭 :  사각형 / 타원 모양 바뀜 
MDI, “Shape”
중심 위치의 초기값 : CPoint(100,100)
모양의 초기값  : 사각형  
색상의 초기값 :  내부색 - 빨강, 라인색-파랑
도형  크기의 초기값 : 높이 100, 폭  100
Client 영역에 원하는 색을 배경으로 칠하기
WM_ERASEBKGND
Cbrush 생성, CDC::FillRect 사용

class CShapeDoc : public CDocument
{  
    ……
   public:
    CPoint  m_Center;
 BOOL   m_bRect;
 CSize   m_Size;
              COLORREF m_LineColor;
 COLORREF m_RgnColor;
     ……
};
BOOL CShapeDoc::OnNewDocument( )
{  
    ……
     m_Center = CPoint(100,100);
 m_bRect = TRUE;
     m_Size = CSize(100,100);
 m_LineColor = RGB(0,0,255);
 m_RgnColor = RGB(255,0,0);
    ……
}
void CShapeView::OnDraw(CDC* pDC)
{    
   CShapeDoc* pDoc = GetDocument();
    ASSERT_VALID(pDoc);
    // TODO: add draw code for native data here
    CRect   rect;  
    rect.left=pDoc->m_Center.x-pDoc->m_Size.cx/2;
    rect.top=pDoc->m_Center.y-pDoc->m_Size.cy/2;
    rect.right=pDoc->m_Center.x+pDoc->m_Size.cx/2;
    rect.bottom=pDoc->m_Center.y+pDoc->m_Size.cy/2;

    CPen MyPen,*OldPen;
     MyPen.CreatePen(PS_SOLID,2,pDoc->m_LineColor);
     OldPen=pDC->SelectObject(&MyPen);
     CBrush MyBr,*OldBr;
     MyBr.CreateSolidBrush(pDoc->m_RgnColor);
     OldBr=pDC->SelectObject(&MyBr);
     if(pDoc->m_bRect)
 pDC->Rectangle(rect);
     else
 pDC->Ellipse(rect);
   
    pDC->SelectObject(OldPen);
    pDC->SelectObject(OldBr);
}

void CShapeView::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
GetDocument()->m_Center = point;
// Invalidate();
GetDocument()->UpdateAllViews(NULL);
CView::OnLButtonDown(nFlags, point);
}

void CShapeView::OnRButtonDown(UINT nFlags, CPoint point)
{
 // TODO: Add your message handler code here and/or call default
 GetDocument()->m_bRect = !GetDocument()->m_bRect;
 //  Invalidate();
     GetDocument()->UpdateAllViews(NULL);
 
 CView::OnRButtonDown(nFlags, point);
}

BOOL CShapeView::OnEraseBkgnd(CDC* pDC)
{
 // TODO: Add your message handler code here and/or call default
 CBrush Br;
 Br.CreateSolidBrush(RGB(0,125,125));
 CRect rect;
 GetClientRect(rect);
     pDC->FillRect(rect,&Br);
     return TRUE;
 //return CView::OnEraseBkgnd(pDC);
}

'IT Note > 기타언어' 카테고리의 다른 글

[MFC] 비트맵(Bitmap) 출력  (0) 2008.11.24
[MFC] OnDraw 동작  (0) 2008.11.24
[MFC] Graphic 출력  (0) 2008.11.24