14
1 프프프프프 프프 #15 메메 메메 메메 메메 메메 메메 3 프프 프프프 프프프 프프프 void CLecture151View::OnDraw(CDC* pDC) { CLecture151Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); CPen pen, *pOldPen; if ( color == 0 ) pen.CreatePen(PS_SOLID,1,RGB(25 5,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); } int color = 0; // 프프프프

메뉴 복습 예제

Embed Size (px)

DESCRIPTION

메뉴 복습 예제. 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 ) - PowerPoint PPT Presentation

Citation preview

Page 1: 메뉴 복습 예제

1프로그래밍 응용 #15

메뉴 복습 예제메뉴 복습 예제

3 가지 색깔의 사각형 그리기

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);

}

int color = 0; // 전역변수

Page 2: 메뉴 복습 예제

2프로그래밍 응용 #15

메뉴 복습 예제메뉴 복습 예제

메뉴 선택 처리 routine

void CLecture151View::OnColorRed() {

color = 0;Invalidate();

}

void CLecture151View::OnColorGreen() {

color = 1;Invalidate();

}

void CLecture151View::OnColorBlue() {

color = 2;Invalidate();

}

Page 3: 메뉴 복습 예제

3프로그래밍 응용 #15

ToolbarToolbar 의 사용의 사용

ToolBar

• 메뉴의 기능 중 자주 쓰이는 것들을 버튼 형태로 만들어 놓은 것• 버튼을 눌렀을 때에는 해당 메뉴를 선택한 것과 동일한 효과를 가져옴

ToolBar 의 Bitmap 편집 : Resource View 에서 Toolbar 선택

혹시 안 보이면 오른쪽 마우스 클릭 후 Graphics 선택

Page 4: 메뉴 복습 예제

4프로그래밍 응용 #15

ToolbarToolbar 의 의 PropertiesProperties

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

Page 5: 메뉴 복습 예제

5프로그래밍 응용 #15

ToolbarToolbar 를 누르면 어떤 일이 벌어지는가를 누르면 어떤 일이 벌어지는가 ??

메뉴의 ID_COLOR_RED 를 선택했을 때 처리 routine : OnColorRed()

• Toolbar 의 빨간색 버튼 (ID_COLOR_RED) 를 선택했을 때에도 OnColorRed()가 실행됨

• 따로 처리 루틴을 작성할 필요가 없음

Page 6: 메뉴 복습 예제

6프로그래밍 응용 #15

ON_COMMAND_RANGE ON_COMMAND_RANGE 매크로매크로

ON_COMMAND_RANGE

• 여러 개의 비슷한 역할을 하는 메뉴를 한 가지 함수에서 처리함• 이때까지의 처리 방법

• 하나의 함수로 처리함

Red 메뉴 선택

Green 메뉴 선택

Blue 메뉴 선택

OnColorRed( ) 실행

OnColorGreen( ) 실행

OnColorBlue( ) 실행

Red 메뉴 선택

Green 메뉴 선택

Blue 메뉴 선택

OnColor( ) 실행

Page 7: 메뉴 복습 예제

7프로그래밍 응용 #15

ON_COMMAND_RANGE 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()

Page 8: 메뉴 복습 예제

8프로그래밍 응용 #15

참고 참고 : Resource.h: Resource.h

Resource.h

#define ID_COLOR_RED 32771#define ID_COLOR_GREEN 32772#define ID_COLOR_BLUE 32773

Page 9: 메뉴 복습 예제

9프로그래밍 응용 #15

OnColor( ) RoutineOnColor( ) Routine

OnColor( ) routine 작성• 인수 (nID) : 선택된 메뉴의 ID 가 넘어 옴

void CLecture152View::OnColor(UINT nID){ color = nID - ID_COLOR_RED; Invalidate();}

Page 10: 메뉴 복습 예제

10프로그래밍 응용 #15

Context MenuContext Menu 의 사용의 사용

오른쪽 마우스를 click 했을 때 Context Menu 가 나오게 하는 방법

오른쪽 마우스를 click 했을 때 발생하는 메시지• WM_RBUTTONDOWN

• WM_CONTEXTMENU OnContextMenu( )

Page 11: 메뉴 복습 예제

11프로그래밍 응용 #15

OnContextMenuOnContextMenu

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,Afx

GetMainWnd());

}

0 1 2 3 4

Page 12: 메뉴 복습 예제

12프로그래밍 응용 #15

예제 예제 (lecture152)(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);}

Page 13: 메뉴 복습 예제

13프로그래밍 응용 #15

예제예제

void CLecture152View::OnClockStart() {

}

void CLecture152View::OnClockStop() {

}

void CLecture152View::OnTimer(UINT nIDEvent) {

}

Page 14: 메뉴 복습 예제

14프로그래밍 응용 #15

예제예제

void CLecture152View::OnUpdateClockStart(CCmdUI* pCmdUI) {

}

void CLecture152View::OnClockReset() {

}