2009. 8. 24. 16:25
Programming/MFC
1. Draw Menu 만들기
-
- ID_DRAW_CIRCLE, ID_DRAW_SQUARE, ID_DRAW_PATTERN
2. CEx5View
private: BOOL m_bDrawPattern; BOOL m_bIsCircle; CRect m_Rect;
3. Command Message Handler 구현
void CEx6View::OnDrawCircle() { m_bIsCircle = TRUE; m_Rect += CPoint(25, 25); InvalidateRect(m_Rect); } void CEx6View::OnDrawPattern() { m_bDrawPattern ^= 1; } void CEx6View::OnDrawSquare() { m_bIsCircle = FALSE; m_Rect += CPoint(25, 25); InvalidateRect(m_Rect); } void CEx6View::OnUpdateDrawCircle(CCmdUI *pCmdUI) { pCmdUI->Enable(!m_bIsCircle); } void CEx6View::OnUpdateDrawSquare(CCmdUI *pCmdUI) { pCmdUI->Enable(m_bIsCircle); } void CEx6View::OnUpdateDrawPattern(CCmdUI *pCmdUI) { pCmdUI->SetCheck(m_bDrawPattern); }
4. CEx6View::OnDraw
void CEx6View::OnDraw(CDC* pDC) { CEx6Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다. CBrush myBrush, *pOrgBrush; myBrush.CreateHatchBrush(HS_CROSS, RGB(0, 255, 0)); if (m_bDrawPattern) pOrgBrush = pDC->SelectObject(&myBrush); else pDC->SelectStockObject(WHITE_BRUSH); if (m_bIsCircle) pDC->Ellipse(m_Rect); else pDC->Rectangle(m_Rect); if (m_bDrawPattern) pDC->SelectObject(pOrgBrush); }
5. CEx6View::OnInitialUpdate
void CEx6View::OnInitialUpdate() { CView::OnInitialUpdate(); m_Rect = CRect(0, 0, 100, 100); m_bIsCircle = TRUE; m_bDrawPattern = FALSE; }
6. CMainFrame
protected: // 컨트롤 모음이 포함된 멤버입니다. CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CToolBar m_myToolBar;
7. CMainFrame::OnCreate
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // ~~~~ if (!m_myToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_LEFT | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_myToolBar.LoadToolBar(IDR_TOOLBAR1)) { TRACE0("도구 모음을 만들지 못했습니다.\n"); return -1; // 만들지 못했습니다. } m_myToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_myToolBar); return 0; }