Programming/MFC
Example 5 : MenuBar
부풍
2009. 8. 27. 15:29
Ex5View.h
#define DM_LINE 0 #define DM_RECTANGLE 1 #define DM_ELLIPSE 2 class CEx5View : public CView { // ~~~~ // Rectangle CRect m_rectToDraw; // Save Current Draw Mode int m_nCurrentDrawMode;
CEx5View::OnInitialUpdate
void CEx5View::OnInitialUpdate() { CView::OnInitialUpdate(); // TODO: 여기에 특수화된 코드를 추가 및/또는 기본 클래스를 호출합니다. m_rectToDraw = CRect(10, 10, 510, 310); m_nCurrentDrawMode = DM_LINE; }
CEx5View::OnDraw
void CEx5View::OnDraw(CDC* pDC) { CEx5Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 여기에 원시 데이터에 대한 그리기 코드를 추가합니다. switch(m_nCurrentDrawMode) { case DM_LINE : pDC->MoveTo(m_rectToDraw.TopLeft()); pDC->LineTo(m_rectToDraw.BottomRight()); break; case DM_RECTANGLE : pDC->Rectangle(m_rectToDraw); break; case DM_ELLIPSE : pDC->Ellipse(m_rectToDraw); break; } }
Menu 처리
void CEx5View::OnDrawLine() { // TODO: 여기에 명령 처리기 코드를 추가합니다. m_nCurrentDrawMode = DM_LINE; Invalidate(); } void CEx5View::OnDrawRectangle() { // TODO: 여기에 명령 처리기 코드를 추가합니다. m_nCurrentDrawMode = DM_RECTANGLE; Invalidate(); } void CEx5View::OnDrawEllipse() { // TODO: 여기에 명령 처리기 코드를 추가합니다. m_nCurrentDrawMode = DM_ELLIPSE; Invalidate(); } void CEx5View::OnUpdateDrawEllipse(CCmdUI *pCmdUI) { // TODO: 여기에 명령 업데이트 UI 처리기 코드를 추가합니다. pCmdUI->SetCheck(m_nCurrentDrawMode == DM_ELLIPSE); } void CEx5View::OnUpdateDrawLine(CCmdUI *pCmdUI) { // TODO: 여기에 명령 업데이트 UI 처리기 코드를 추가합니다. pCmdUI->SetCheck(m_nCurrentDrawMode == DM_LINE); } void CEx5View::OnUpdateDrawRectangle(CCmdUI *pCmdUI) { // TODO: 여기에 명령 업데이트 UI 처리기 코드를 추가합니다. pCmdUI->SetCheck(m_nCurrentDrawMode == DM_RECTANGLE); }
Context Menu (WM_CONTEXTMENU)
void CMainFrame::OnContextMenu(CWnd* /*pWnd*/, CPoint point) { // TODO: 여기에 메시지 처리기 코드를 추가합니다. /* CMenu menu; CMenu* pPopup; int index = 0; // 1로 바꿔봄 menu.LoadMenu(IDR_POPUP); pPopup = menu.GetSubMenu(index); */ CMenu *pMenu, *pPopup; pMenu = GetMenu(); pPopup = pMenu->GetSubMenu(2); pPopup->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, this, NULL); }