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; // 전역변수
2프로그래밍 응용 #15
메뉴 복습 예제메뉴 복습 예제
메뉴 선택 처리 routine
void CLecture151View::OnColorRed() {
color = 0;Invalidate();
}
void CLecture151View::OnColorGreen() {
color = 1;Invalidate();
}
void CLecture151View::OnColorBlue() {
color = 2;Invalidate();
}
3프로그래밍 응용 #15
ToolbarToolbar 의 사용의 사용
ToolBar
• 메뉴의 기능 중 자주 쓰이는 것들을 버튼 형태로 만들어 놓은 것• 버튼을 눌렀을 때에는 해당 메뉴를 선택한 것과 동일한 효과를 가져옴
ToolBar 의 Bitmap 편집 : Resource View 에서 Toolbar 선택
혹시 안 보이면 오른쪽 마우스 클릭 후 Graphics 선택
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
5프로그래밍 응용 #15
ToolbarToolbar 를 누르면 어떤 일이 벌어지는가를 누르면 어떤 일이 벌어지는가 ??
메뉴의 ID_COLOR_RED 를 선택했을 때 처리 routine : OnColorRed()
• Toolbar 의 빨간색 버튼 (ID_COLOR_RED) 를 선택했을 때에도 OnColorRed()가 실행됨
• 따로 처리 루틴을 작성할 필요가 없음
6프로그래밍 응용 #15
ON_COMMAND_RANGE ON_COMMAND_RANGE 매크로매크로
ON_COMMAND_RANGE
• 여러 개의 비슷한 역할을 하는 메뉴를 한 가지 함수에서 처리함• 이때까지의 처리 방법
• 하나의 함수로 처리함
Red 메뉴 선택
Green 메뉴 선택
Blue 메뉴 선택
OnColorRed( ) 실행
OnColorGreen( ) 실행
OnColorBlue( ) 실행
Red 메뉴 선택
Green 메뉴 선택
Blue 메뉴 선택
OnColor( ) 실행
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()
8프로그래밍 응용 #15
참고 참고 : Resource.h: Resource.h
Resource.h
#define ID_COLOR_RED 32771#define ID_COLOR_GREEN 32772#define ID_COLOR_BLUE 32773
9프로그래밍 응용 #15
OnColor( ) RoutineOnColor( ) Routine
OnColor( ) routine 작성• 인수 (nID) : 선택된 메뉴의 ID 가 넘어 옴
void CLecture152View::OnColor(UINT nID){ color = nID - ID_COLOR_RED; Invalidate();}
10프로그래밍 응용 #15
Context MenuContext Menu 의 사용의 사용
오른쪽 마우스를 click 했을 때 Context Menu 가 나오게 하는 방법
오른쪽 마우스를 click 했을 때 발생하는 메시지• WM_RBUTTONDOWN
• WM_CONTEXTMENU OnContextMenu( )
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
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);}
13프로그래밍 응용 #15
예제예제
void CLecture152View::OnClockStart() {
}
void CLecture152View::OnClockStop() {
}
void CLecture152View::OnTimer(UINT nIDEvent) {
}
14프로그래밍 응용 #15
예제예제
void CLecture152View::OnUpdateClockStart(CCmdUI* pCmdUI) {
}
void CLecture152View::OnClockReset() {
}