1 / 14

메뉴 복습 예제

메뉴 복습 예제. 3 가지 색깔의 사각형 그리기. int color = 0; // 전역변수. void CLecture151View::OnDraw(CDC* pDC) { CLecture151Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen pen, *pOldPen; if ( color == 0 ) pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); else if ( color == 1 )

Télécharger la présentation

메뉴 복습 예제

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 메뉴 복습 예제 • 3가지 색깔의 사각형 그리기 int color = 0; // 전역변수 void CLecture151View::OnDraw(CDC* pDC) { CLecture151Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen pen, *pOldPen; if ( color == 0 ) pen.CreatePen(PS_SOLID,1,RGB(255,0,0)); else if ( color == 1 ) pen.CreatePen(PS_SOLID,1,RGB(0,255,0)); else if ( color == 2 ) pen.CreatePen(PS_SOLID,1,RGB(0,0,255)); pOldPen = pDC->SelectObject(&pen); pDC->Rectangle(10,10,200,200); pDC->SelectObject(pOldPen); }

  2. 메뉴 복습 예제 • 메뉴 선택 처리 routine void CLecture151View::OnColorRed() { color = 0; Invalidate(); } void CLecture151View::OnColorGreen() { color = 1; Invalidate(); } void CLecture151View::OnColorBlue() { color = 2; Invalidate(); }

  3. Toolbar의 사용 • ToolBar • 메뉴의 기능 중 자주 쓰이는 것들을 버튼 형태로 만들어 놓은 것 • 버튼을 눌렀을 때에는 해당 메뉴를 선택한 것과 동일한 효과를 가져옴 • ToolBar의 Bitmap 편집 : Resource View에서 Toolbar 선택 혹시 안 보이면 오른쪽 마우스 클릭 후 Graphics 선택

  4. Toolbar의 Properties • Toolbar의 Property : Resource View에서 toolbar의 해당 버튼을 double click • ID : 버튼의 ID. 메뉴의 ID와 같이 하는 것이 보통 • 예: 메뉴 색깔  Red의 ID : ID_COLOR_RED • Toolbar의 빨간색 선택 버튼 : ID_COLOR_RED (같음) • Height, Width : 버튼의 세로, 가로 길이 • Prompt : 마우스가 버튼 위에 올라 갔을 때 상태표시줄에 표시할 텍스트와 툴팁 메시지를 지정 • 예제: 빨간색 사각형\nRed status bar 툴팁

  5. Toolbar를 누르면 어떤 일이 벌어지는가? • 메뉴의 ID_COLOR_RED를 선택했을 때 처리 routine : OnColorRed() • Toolbar의 빨간색 버튼 (ID_COLOR_RED)를 선택했을 때에도 OnColorRed()가 실행됨 • 따로 처리 루틴을 작성할 필요가 없음

  6. ON_COMMAND_RANGE 매크로 • ON_COMMAND_RANGE • 여러 개의 비슷한 역할을 하는 메뉴를 한 가지 함수에서 처리함 • 이때까지의 처리 방법 • 하나의 함수로 처리함 OnColorRed( ) 실행 Red 메뉴 선택 OnColorGreen( ) 실행 Green 메뉴 선택 OnColorBlue( ) 실행 Blue 메뉴 선택 Red 메뉴 선택 Green 메뉴 선택 OnColor( ) 실행 Blue 메뉴 선택

  7. ON_COMMAND_RANGE 매크로 • C***View class에 다음을 추가 • 의미 : ID_COLOR_RED에서 ID_COLOR_BLUE 사이의 모든 메뉴를 선택했을 때, OnColor( )함수를 실행함 • ID_COLOR_RED가 가장 작은 ID, ID_COLOR_BLUE가 가장 큰 ID여야 함. • OnColor( ) 함수 추가 BEGIN_MESSAGE_MAP(CLecture152View, CView) ON_COMMAND_RANGE(ID_COLOR_RED, ID_COLOR_BLUE, OnColor) END_MESSAGE_MAP()

  8. 참고 : Resource.h • Resource.h #define ID_COLOR_RED 32771 #define ID_COLOR_GREEN 32772 #define ID_COLOR_BLUE 32773

  9. OnColor( ) Routine • OnColor( ) routine 작성 • 인수 (nID) : 선택된 메뉴의 ID가 넘어 옴 void CLecture152View::OnColor(UINT nID) { color = nID - ID_COLOR_RED; Invalidate(); }

  10. Context Menu의 사용 • 오른쪽 마우스를 click 했을 때 Context Menu가 나오게 하는 방법 • 오른쪽 마우스를 click 했을 때 발생하는 메시지 • WM_RBUTTONDOWN • WM_CONTEXTMENU  OnContextMenu( )

  11. OnContextMenu • Classwizard에서 OnContexMenu( ) 선택 • OnContextMenu의 내용 void CLecture151View::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu muTemp, *pContextMenu; muTemp.LoadMenu(IDR_MAINFRAME); pContextMenu = muTemp.GetSubMenu(4); pContextMenu->TrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,AfxGetMainWnd()); } 0 1 2 3 4

  12. 예제 (lecture152) • Stop Watch • Start 메뉴 및 Stop 메뉴는 필요에 따라서 Enable 됨 int second = 0; BOOL is_counting = FALSE; void CLecture152View::OnDraw(CDC* pDC) { CLecture152Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CString str; str.Format("%04d",second); pDC->TextOut(100,100,str); }

  13. 예제 void CLecture152View::OnClockStart() { } void CLecture152View::OnClockStop() { } void CLecture152View::OnTimer(UINT nIDEvent) { }

  14. 예제 void CLecture152View::OnClockReset() { } void CLecture152View::OnUpdateClockStart(CCmdUI* pCmdUI) { }

More Related