Programming/MFC
(MFC) Example 10 : FormView(GDI)
부풍
2009. 8. 24. 16:29
CFormView 계승
Resource Editor를 이용한 다이얼로그 작성
- IDC_RED, IDC_GREEN, IDC_BLUE
- IDC_CIRCLE, IDC_RECTANGLE
- IDC_5PIX, IDC_10PIX
- IDC_DRAW
- 순서를 정하고 (서식 - 탭순서)
- IDC_RED, IDC_CIRCLE 만 Group 속성 Check
CEx10View
#define RED 1 #define GREEN 2 #define BLUE 3 #define CIRCLE 1 #define RECTANGLE 2 #define PIX5 5 #define PIX10 10 class CEx10View : public CFormView { // ~~~~ private: int m_nColor; int m_nShape; int m_nLineWidth;
Message 처리
void CEx10View::OnBnClickedBlue() { m_nColor = BLUE; } void CEx10View::OnBnClickedRed() { m_nColor = RED; } void CEx10View::OnBnClickedGreen() { m_nColor = GREEN; } void CEx10View::OnBnClickedCircle() { m_nShape = CIRCLE; } void CEx10View::OnBnClickedRectangle() { m_nShape = RECTANGLE; }
새로 그리기
void CEx10View::OnBnClickedDraw() { Invalidate(); }
Check Button 메시지 처리
void CEx10View::OnBnClicked10pix() { CButton *pButton = (CButton*)GetDlgItem(IDC_10PIX); if (pButton->GetCheck() == BST_CHECKED) { m_nLineWidth = PIX10; pButton = (CButton*)GetDlgItem(IDC_5PIX); pButton->SetCheck(BST_UNCHECKED); } } void CEx10View::OnBnClicked5pix() { CButton *pButton = (CButton*)GetDlgItem(IDC_5PIX); if (pButton->GetCheck() == BST_CHECKED) { m_nLineWidth = PIX5; pButton = (CButton*)GetDlgItem(IDC_10PIX); pButton->SetCheck(BST_UNCHECKED); } }
OnPaint
void CEx10View::OnPaint() { CPaintDC dc(this); // device context for painting // TODO: 여기에 메시지 처리기 코드를 추가합니다. // 그리기 메시지에 대해서는 CFormView::OnPaint()을(를) 호출하지 마십시오. CBrush brush; switch(m_nColor) { case RED : brush.CreateSolidBrush(RGB(255, 0, 0)); break; case GREEN : brush.CreateSolidBrush(RGB(0, 255, 0)); break; default : brush.CreateSolidBrush(RGB(0, 0, 255)); break; } CBrush *pOrgBrush = dc.SelectObject(&brush); CPen pen; switch(m_nLineWidth) { case PIX5 : pen.CreatePen(PS_SOLID, PIX5, RGB(0, 0, 0)); break; default : pen.CreatePen(PS_SOLID, PIX10, RGB(0, 0, 0)); break; } CPen *pOrgPen = dc.SelectObject(&pen); switch(m_nShape) { case CIRCLE : // Circle dc.Ellipse(200, 50, 400, 250); break; default : dc.Rectangle(200, 50, 400, 250); break; } dc.SelectObject(pOrgBrush); dc.SelectObject(pOrgPen); }