Visual C++ Programming Menu

Slides:



Advertisements
Similar presentations
6 장 객체 - 지향 설계 ③. 목차 GUI 레이아웃  전화기 키 패드 전화기 키 패드 전화기 키 패드 모양의 GUI 를 만드는 Telephone.java, TelephonePanel.java 를 완성해 보자.  주석을 참고하여 TelephonePanel.java.
Advertisements

1/ 편집 기능 사용하기 – 실습 1 글자 모양을 바꾸고 싶은 곳을 블록 설정 [ 글자 모양 ] 대화 상자에서 [ 글꼴 ] ‘ 궁서체 ’, [ 글자 색 ] ‘ 토마토색 ’ 으로 선택 → [ 설정 ] 클릭 → 글자 모양 변경.
을지대학교 무선 네트워크 사용 방법 2010 년 06 월 01 일. 을지대학교 무선 네트워크 사용 방법 1. PC 무선랜 카드 활성화 및 체크 1 단계 : 시작 -> 설정 -> 네트워크 설정 2 단계 : 무선 네트워크 설정 선택 -> 마우스 버튼 오른쪽 클릭 -> 사용.
Timer Department of Digital Contents Sang Il Park.
Message Process for SDI Chung-Buk HRD Institute of KCCI Dept. of Information & Communication PhD. Kang, Won-Chan.
MFC의 개요 MFC MFC의 이점 윈도우 애플리케이션을 생성하기 위해 만들어진 C++ 클래스 라이브러리
Visual C++ Programming Document/View Architecture Department of Digital Contents Sang Il Park.
Department of Digital Contents Sang Il Park
메뉴 용어 (1/6) 최상위 메뉴 = 메뉴 바 최상위 메뉴 = 메뉴 바.
목차 Contents 무선인터넷용 비밀번호 설정방법 Windows 7 Windows 8 Windows XP MAC OS.
DB 프로그래밍 학기.
MFC Application Frameworks (AFX)
149개의 실습예제로 배우는 Flash 8.
제어판 –> 네트워크 및 인터넷 –> 네트워크 및 공유센터 이동 후 화면에서 “새 연결 또는 네트워크 설정” 클릭
Lab 10 Guide: 프린터 출력 예제. 한 페이지의 그림 인쇄 (교재 24장, 쪽)
컴퓨터프로그래밍 1주차실습자료 Visual Studio 2005 사용법 익히기.
MCMS3000 네트워크 설정방법 [반도 HFCNMS 시스템 Set-up] 반도전자통신
윤 홍 란 다이알로그(대화상자) 윤 홍 란
MFC 발전 과정과 주요 특징을 개괄적으로 이해한다.
Department of Digital Contents Sang Il Park
Lab 2 Guide: 교재 3장 그래픽 예제 ( 쪽) - 펜과 브러시로 그리기 - 튀는 공
공통 컨트롤의 종류와 특징을 개관한다. 각종 공통 컨트롤의 사용 방법을 익힌다..
Outlook Express 메일 백업 및 복원가이드
DPR-1630&1615 IP공유기 셋팅 방법 고객지원팀 작성자 : 정청석.
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
07. 메뉴와 대화상자 제목. 07. 메뉴와 대화상자 제목 메뉴를 작성하고 사용하는 방법을 배운다. 토스트의 다양한 출력 방법을 알아본다. 대화상자의 사용법을 익힌다.
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
Visual C++ Programming Keyboard & Timer
마우스(Mouse) 다루기 컴퓨터응용 및 실습 I.
Visual C++ Programming Output and File
제4장 대화상자 4.1 CDialogEx 클래스 4.2 대화상자 기반의 프로그램 실습 4-1 MFC 기본 컨트롤 사용법 익히기
Visual C++ Programming Common Controls
Visual C++ Programming Common Controls
5장. 마우스와 키보드.
Visual C++ Programming Output and File
1. C++ 시작하기.
D / K / I / T / E / C / H / N / O / L / O / G / Y
학습목표 학습목차 다른 홈페이지의 HTML 파일 코드를 보는 방법에 대해 알아봅니다.
ASP.NET AJAX 비동기 게시판 작성 2007 컴퓨터공학실험( I )
분할 윈도, 다중 뷰… 영상 통신 연구실 권 동 진 발표 일 : 04월 27일.
13. 연산자 오버로딩.
JA A V W. 03.
CHAP 13. 방명록 만들기 실습.
Lab 4 보고서 교재 5장 사용자 인터페이스 예제 - 사용자 인터페이스 갱신
CHAP 5. 레이아웃.
Lab 1 Guide: 교재 2장 DrawX ( 쪽)
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
스위시 맥스2 이미지 갤러리 만들기 아래 그림이 스위시 맥스2로 만들 이미지 갤러리 이다.
Lab 8 Guide: 멀티스레딩 예제 2 * Critical Section을 이용한 멀티스레딩 동기화 (교재 15장, 쪽)
SEOUL NATIONAL UNIVERSITY OF SCIENCE & TECHNOLOGY
객체기반 SW설계 팀활동지 4.
단축키 기능 1. 단축키 기능 설명 Alt + R 조회 S 저장 I 삽입 A 추가 D 삭제 P 출력 Q 닫기
1. 신규 연세메일(Gmail)에 로그인 합니다. ( yonsei. ac. kr )
영상처리 실습 (OpenCV + MFC) Chonbuk National University A.I. Lab.
가장 많이 사용 Accelerator 최상위 WM_COMMAND, OLE 메시지 관련 이벤트 처리만 가능 이 클래스를 상속받아서 다른 이벤트 처리 이벤트 처리 관련 윈도우(창) 최상위 클래스 멀티 테스킹(모듈) CFrameWnd, Cview,
제 8장. 클래스의 활용 학기 프로그래밍언어및실습 (C++).
메뉴(Menu) 컴퓨터응용 및 실습 I.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
9 브라우저 객체 모델.
Android -Data Base 윤수진 GyeongSang Univ. IT 1.
과제물 3호 3번 문제 설명자료.
MFC 응용 프로그램 구조 두 개의 윈도우로 구성된 일반적인 MFC 프로그램 프레임 윈도우
Power Point 예제 디자인 적용 (서식) - (디자인적용) - (원하는 디자인 선택)
CHAP 5. 메뉴와 대화상자.
6 객체.
사용자 인터페이스.
MFC 기초 윈도우 응용프로그램 개발 간략한 역사 Microsoft Foundation Classes
BoardGame 보드게임 따라가기.
Presentation transcript:

Visual C++ Programming Menu Department of Digital Contents Sang Il Park

Interface - MENU

Review: 메뉴 생성 실습 리소스 뷰 사용

Review: 메뉴 생성 메뉴 항목 속성 의미 내부적으로 메뉴 항목을 구분하는 번호이며 일반적으로 ID_메뉴이름_항목이름 형태로 만든다. 예) ID_EDIT_CUT 화면에 표시되는 문자열로 액세스키를 지정하려면 해당 문자 앞에 '&' 기호를 사용한다. 단축키를 사용할 경우 '\t' 기호를 삽입하여 단축키를 나타내는 문자열이 탭 위치에 정렬되도록 한다. 예) 잘라내기(&T)\tCtrl+X 메뉴 항목을 구분하는 가로줄이 표시된다. 설정하면 명령 항목이 아닌 팝업 항목이 된다. 최상위 메뉴는 대개 Pop-up 속성을 가진다. 속성 ID Caption Separator Pop-up

Review: 메뉴 생성 메뉴 항목 속성 (cont'd) 메뉴 항목이 표시되지만 사용하지는 못한다. 일반적으로 메뉴 항목은 하나의 열(Column)에 표시되지만 항목의 개수가 많을 경우 두 개 이상의 열에 표시되게 할 수 있다. Break 속성으로 Column 또는 Bar를 선택하면 이때부터는 다음 열에 메뉴 항목이 표시된다. Column과 Bar 속성은 기본적으로 같은 기능을 하지만 Bar 속성을 선택하면 열 구분선(세로줄)이 생긴다. 메뉴 항목의 왼쪽에 체크 표시를 한다. Inactive Break Checked 의미 속성

Review: 메뉴 명령 처리 속성 창을 이용

Review: 메뉴 명령 처리 MFC의 메뉴 명령 처리 방법 각각의 메뉴 항목에 대해 함수를 따로 작성 명령 핸들러(Command Handler) ON_COMMAND(메뉴ID, 함수명) 매크로를 이용하여 메뉴 항목과 함수 연결 BEGIN_MESSAGE_MAP(CChildView,CWnd ) ... ON_COMMAND(ID_COLOR_RED, OnColorRed) ON_COMMAND(ID_COLOR_GREEN, OnColorGreen) ON_COMMAND(ID_COLOR_BLUE, OnColorBlue) END_MESSAGE_MAP() void CChildView::OnColorRed() { m_color = RGB(255, 0, 0); Invalidate(); }

Review: 메뉴 항목 갱신 메뉴 항목 갱신 예

Review: 메뉴 항목 갱신 CCmdUI 클래스 멤버 함수 멤버 함수 의미 사용 예 Enable( ) 활성화 상태 변경 pCmdUI->Enable(b_DrawMode); SetCheck( ) 체크 상태 변경 pCmdUI->SetCheck(m_color == RGB(255, 0, 0)); SetRadio( ) 라디오 표시 상태 변경 pCmdUI->SetRadio(m_color == RGB(255, 0, 0)); SetText( ) 문자열 변경 pCmdUI->SetText("Light On");

Review: 메뉴 항목 갱신 속성 창을 이용

Review: 메뉴 항목 갱신 MFC의 메뉴 항목 갱신 방법 각각의 메뉴 항목에 대해 함수를 따로 작성 명령 갱신 핸들러(Command Update Handler) ON_UPDATE_COMMAND_UI(메뉴ID, 함수명) 매크로를 이용하여 메뉴 항목과 함수 연결 BEGIN_MESSAGE_MAP(CChildView,CWnd ) ... ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed) ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, OnUpdateColorGreen) ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue) END_MESSAGE_MAP() void CChildView::OnUpdateColorRed(CCmdUI* pCmdUI) { pCmdUI->SetCheck(m_color == RGB(255, 0, 0)); }

코딩 실습 사각형을 그리고 메뉴를 통해 색 변경 1. Color를 저장할 변수 선언 COLORREF m_color 2. OnPaint에서 brush 설정 CBrush brush(m_color); dc.SelectObject(&brush); 3. 사각형 그리기 4. 메뉴 만들기 5. 메뉴에 핸들러 함수 연결 6. m_color 값 변경

코딩 실습 Update Command UI 실습 1. UpdateCommand 핸들러 연결 2. pCmdUI->SetCheck(…) 구현 if(m_color==RGB(0,0,255)) pCmdUI->SetCheck(true); else pCmdUI->SetCheck(false);

툴바 (1/4) 툴바 MFC 클래스 선택하면 WM_COMMAND 메시지 발생!

툴바 (2/4) 툴바 리소스

툴바 (3/4) 툴바 코드 class CMainFrame : public CFrameWnd { // 생략 ... protected: CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; }; int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD |

툴바 (4/4) 툴바 코드 (cont'd) WS_VISIBLE | CBRS_TOP | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) || !m_wndToolBar.LoadToolBar(IDR_MAINFRAME)) { TRACE0("Failed to create toolbar\n"); return -1; } // 생략 ... m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY); EnableDocking(CBRS_ALIGN_ANY); DockControlBar(&m_wndToolBar); return 0;

코딩연습 color menu의 내용을 toolbar와 연결시킨다 ToolBar에 버튼 추가 각 버튼에 ID를 menu의 ID와 똑같이 설정 예) ID_COLOR_RED

코딩연습 Menu에 없는 작업을 toolbar에서 하고 싶다면… 직접 메시지를 만들고 연결 ToolBar에 버튼 추가 MessageMap 추가 ON_COMMAND(…) 함수 정의/선언 추가 afx_msg void OnSelectCircle();

Menu 만들기의 2가지 방법 Resource를 이용하기 직접 Coding을 통해 만들기 CMenu 객체를 활용

CMenu를 이용하여 Menu 만들기 Popup Menu 만들기 Popup Menu를 최상위 Menu에 붙이기 2. 최상위 메뉴에 붙이기 1. Popup Menu 만들기

CMenu를 이용하여 Menu 만들기 붙일 팝업 메뉴 CMenu 객체 생성 최상위 CMenu 객체에 붙이기 새로 PopupMenu를 생성: CreatePopupMenu() 팝업 메뉴에 항목 추가 AppendMenu() 함수 이용 최상위 CMenu 객체에 붙이기 최상위 CMenu 객체 생성 새로 만들기 : CreateMenu() 현재 메뉴의 포인터를 가져오기 : GetMenu() 팝업 메뉴를 최상위 메뉴에 연결

실습: Menu 만들어 붙이기 Menu는 MainFrame 클래스의 OnCreate 속에… int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // 생략... CMenu Popup; Popup.CreatePopupMenu(); Popup.AppendMenu(MF_STRING, 201, “Red(&R)"); Popup.AppendMenu(MF_STRING, 202, “Green(&G)"); Popup.AppendMenu(MF_STRING, 203, “Blue(&B)"); CMenu * pMenuMain = GetMenu(); pMenuMain->AppendMenu(MF_POPUP, (UINT_PTR) Popup.Detatch(), “Color(&C)”); }

정리 CMenu 객체: 메뉴의 생긴 모양, ID등을 생성 맴버함수: AppendMenu() Flag: MF_STRING (일반적인 메뉴 항목) MF_POPUP (하위 메뉴 연결 시) MF_SEPARATOR ID: MF_STRING 의 경우: Command ID MF_POPUP 의 경우: 붙일 하위 메뉴의 주소 (Detatch() 함수이용) bool CMenu::AppendMenu( Flag, ID, Caption )

컨텍스트 메뉴 컨텍스트 메뉴 = 단축 메뉴 = 팝업 메뉴

컨텍스트 메뉴 동작 순서 1. 마우스 오른쪽 버튼 클릭 또는 키 누름 2. WM_CONTEXTMENU 메시지 발생 1. 마우스 오른쪽 버튼 클릭 또는 키 누름 2. WM_CONTEXTMENU 메시지 발생 3. 메시지 핸들러에서 메뉴를 띄우는 코드 작성

컨텍스트 메뉴 (1/6) WM_CONTEXTMENU 메시지 발생 상황 마우스 오른쪽 버튼을 클릭하는 경우 (WM_RBUTTONDOWN 핸들러가 없는 경우) Shift + F10 키 조합을 누른 경우 가상 키코드 VK_APPS에 해당하는 키( )를 누른 경우

컨텍스트 메뉴 (2/6) WM_CONTEXTMENU 메시지 핸들러 pWnd - 마우스 커서 아래쪽에 있는 윈도우 pos - 마우스 커서의 위치(스크린 좌표) afx_msg void OnContextMenu (CWnd* pWnd, CPoint pos) ;

컨텍스트 메뉴 핸들러 연습 WM_CONTEXTMENU 핸들러를 만들어 보자 AfxMessageBox(_T(“Context Menu”));

컨텍스트 메뉴 (3/6) CMenu::TrackPopupMenu() 함수 nFlags TPM_LEFTALIGN, TPM_CENTERALIGN, TPM_RIGHTALIGN TPM_LEFTBUTTON, TPM_RIGHTBUTTON BOOL TrackPopupMenu (UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = 0) ;

컨텍스트 메뉴 (4/6) CMenu::TrackPopupMenu() 함수 x, y pWnd lpRect 컨텍스트 메뉴가 표시될 위치(스크린 좌표) pWnd 컨텍스트 메뉴의 WM_COMMAND 메시지를 받을 윈도우 AfxGetMainWnd() 함수 를 사용하여 창과 연결 lpRect 마우스 버튼을 클릭하더라도 컨텍스트 메뉴가 닫히지 않는 사각형 영역(스크린 좌표) BOOL TrackPopupMenu (UINT nFlags, int x, int y, CWnd* pWnd, LPCRECT lpRect = 0) ;

컨텍스트 메뉴 (5/6) 컨텍스트 메뉴 사용 예 void CChildView::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menuPopup; menuPopup.CreatePopupMenu(); menuPopup.AppendMenu(MF_STRING, 201, "Red (&R)"); menuPopup.AppendMenu(MF_STRING, 202, "Green (&G)"); menuPopup.AppendMenu(MF_STRING, 203, "Blue (&B)"); menuPopup.TrackPopupMenu( TPM_LEFTALIGN|TPM_LEFTBUTTON, point.x, point.y, AfxGetMainWnd()); }

컨텍스트 메뉴 (6/6) 컨텍스트 메뉴 사용 예 void CChildView::OnContextMenu(CWnd* pWnd, CPoint point) { CMenu menu; menu.LoadMenu(IDR_MAINFRAME); CMenu* pMenu = menu.GetSubMenu(4); pMenu->TrackPopupMenu( TPM_LEFTALIGN|TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd()); }

이 밖의 메뉴 및 관련사항 교재 pp 260 ~ 263 시스템 메뉴 가속기(=Accelerator, Hot Key) 트레이 아이콘 및 메뉴

상태바 (Status Bar)

상태바 (1/4) 상태바 MFC 클래스

상태바 (2/4) 상태바 리소스 static UINT indicators[ ] = { ID_SEPARATOR, ID_INDICATOR_CAPS, ID_INDICATOR_NUM, ID_INDICATOR_SCRL, };

상태바 (3/4) 상태바 코드 class CMainFrame : public CFrameWnd { // 생략 ... protected: CStatusBar m_wndStatusBar; CToolBar m_wndToolBar; CChildView m_wndView; };

상태바 (4/4) 상태바 코드 (cont'd) int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) { // 생략 ... if (!m_wndStatusBar.Create(this) || !m_wndStatusBar.SetIndicators(indicators, sizeof(indicators)/sizeof(UINT))) TRACE0("Failed to create status bar\n"); return -1; }

상태바에 정보 표시하기 상태바에 정보를 표시할 공간 마련 스트링 테이블 추가 상태바에 글쓰기 m_wndStatusBar.SetPaneText( 1 , “haha”); 구역 번호 상태바는 CMainFrame의 맴버변수로 존재 어떻게 CChildView에서 CMainFrame으로 갈 수 있을까?

상태바에 정보 표시하기 상태바에 정보를 표시할 공간 마련 스트링 테이블 추가 코드 내에서 매인프레임 포인터를 얻어오기 (CMainFrame *) AfxGetMainWnd() 얻어온 매인프레임을 통해 상태바에 접근 m_wndStatusBar (사전에 public으로 변경) 상태바에 글쓰기 m_wndStatusBar.SetPaneText(1, “haha”);

코딩 연습 마우스의 위치를 표시 1. status bar에 indicator 추가 2. WM_MOUSEMOVE 핸들러 추가 (CChildView) 3. SetPaneText 맴버함수 사용 위치 표시

코딩 연습 마우스의 위치를 표시 void CChildView::OnMouseMove(UINT nFlags, CPoint point) { CString str; str.Format("Mouse Position(%d, %d)", point.x, point.y); CMainFrame * pMain = (CMainFrame *) AfxGetMainWnd(); pMain->m_wndStatusBar.SetPaneText(1, str); CWnd::OnMouseMove(nFlags, point); }