객체지향프로그래밍응용 Chap 5. 사용자인터페이스 (#1) 2012.10.11. 오병우 컴퓨터공학과금오공과대학교
Contents Menu ToolBar DialogBar StatusBar MessageBox Mouse Cursor Program Icon CFormView Department of Computer Engineering 2
응용프로그램의처리제어 종류 Main Menu Menu 개요 View 위에위치한메뉴표시줄 PopUp Menu: 평소에는보이지않음 DropDown Menu: Main Menu 를누르면나타남 Context Menu: 마우스오른쪽버튼클릭하면나타남 System Menu Window 의가장왼쪽위의아이콘클릭 (Dialog Menu) Dialog 도 Menu 가질수있음 Department of Computer Engineering 3
작성 사용 일반적인 Menu 작성및사용방법 VC++ 의리소스편집기를사용하여작성 ID 는주로 IDM_ 으로시작 String Table *.rc 파일에저장 Resource.h View Resource Symbols ON_COMMAND, ON_COMMAND_RANGE WM_COMMAND 메시지처리 Menu 실행처리 ON_UPDATE_COMMAND_UI, ON_UPDATE_COMMAND_UI_RANGE Callback 함수처리 BOOL CEx6App::InitInstance() { CSingleDocTemplate* pdoctemplate; pdoctemplate = new CSingleDocTemplate( IDR_MAINFRAME, RUNTIME_CLASS(CEx6Doc), RUNTIME_CLASS(CMainFrame), RUNTIME_CLASS(CEx6View)); AddDocTemplate(pDocTemplate); 메뉴아이템이화면에나타나기직전에호출되어어떻게표시할지결정 메뉴의인터페이스처리 (Enable(), SetCheck(), SetRadio(), SetText()) e.g., CCmdUI::Enable(FALSE) } return TRUE; Department of Computer Engineering 4
Accelerator Hot-Key 설정 ID 선택 클릭 우측버튼클릭 클릭한후 Hotkey 입력 Department of Computer Engineering 5
Menu Resource 편집 1. 여기서 Insert 키누름 2. 배경색 (&B) 입력 3. 입력완료후 Enter 4. 빨간색 (&R) 입력 5. IDM_... 입력 6. Status Bar 에표시될내용입력 변경하면반영됨 Department of Computer Engineering 6
Seperator 삽입 1. 클릭 2. - 따라서바뀜 최종적으로는이렇게구성 Department of Computer Engineering 7
Accelerator 3. 콤보박스의버튼클릭 1. 더블클릭 2. 클릭 7. Ctrl 을누른상태에서 e (^e) 4. ID 선택 5. 마우스우측버튼클릭 3. 콤보박스의버튼클릭 4. ID 선택 6. 클릭 Department of Computer Engineering 8
Hot-key 를메뉴에반영 뒤에 \tctrl+e 추가 뒤에 \tctrl+e 추가 Department of Computer Engineering 9
View 영역색칠 Header File (Ex7View.h) Source File (Ex7View.cpp) 검은색 Color Reference Document Class 에서관리하는변수는 OnNewDocument() 에서초기화 변수만들면반드시생성자에서초기화!!! FillRect 함수는 SelectObject() 필요없음 ( 그러므로, SelectObject(oldBrush) 또는 SaveDC()/RestoreDC() 도필요없음 ) Department of Computer Engineering 10
Message Handler 등록 확인 확인 View Class 선택 클릭 클릭 Department of Computer Engineering 11
Message Handler Code 입력 F5 눌러서실행 색이바뀌지않음 (Resize 하면바뀜 ) Invalidate() 를해주어야다시그림 F5 눌러서실행 Department of Computer Engineering 12
직접코딩 CEx7View.h 의 Class Declaration 에함수원형입력 Return Type: void, 매개변수없음 CEx7View.cpp 파일 맨위의 Message Map 부분에추가 맨아래의 OnRed() Copy&Paste 후수정 F5 눌러서실행 가끔안되면 Build Rebuild All 수행 Department of Computer Engineering 13
Menu Item 의속성변경 ( 화면에표시될때호출됨 ) IDM_NONE 의비활성화 (F5 눌러서확인 ) 비활성화 UPDATE_COMMAND_UI 클릭 활성화 확인 확인 If 문처리해도되고 이렇게간단히도됨 Department of Computer Engineering 14
IDM_NONE 의 Message Handler 앞페이지의 UPDATE_COMMAND_UI 는메뉴를화면에표시할때만처리됨 Menu 가선택되었을때의동작은 COMMAND 처리해주어야함 COMMAND 클릭 확인 확인 F5 눌러서확인 Department of Computer Engineering 15
Resource.h 2. 더블클릭 1. 솔루션탐색기 Tab Department of Computer Engineering 16
ID 값변경 ( 계속 ) COMMAND_RANGE 또는 UPDATE_COMMAND_UI_RANGE 매크로를사용하려면 ID 들이연속된값이어야함 ( 순서중요 ) Department of Computer Engineering 17
UPDATE_COMMAND_UI_RANGE 는 Class Wizard 에서지원안됨 IDM_RED 에대한 UPDATE_COMMAND_UI 를 Class Wizard 를통해생성하고변경하는 3.UPDATE_ COMMAND _UI 선택 2. View Class 선택 1. 클릭 4.OK Department of Computer Engineering 18
IDM_RED 를위한 Callback 함수를 IDM_GREEN 및 IDM_BLUE 도처리할수있도록변경 Hea der File 변경전 Ex7View.h 변경후 함수이름변경 Sou rce File Ex7View.cpp IDM_RED 에서 IDM_BLUE 까지 Department of Computer Engineering 19
UPDATE_COMMAND_UI_RANGE 를위한 Callback 함수 메뉴를표시하기위해 3 번호출됨 IDM_RED, IDM_GREEN, IDM_BLUE 각각을표시하기위해호출됨 3개를한꺼번에처리하지않는다는것에주의할것 F5 눌러서실행확인 Department of Computer Engineering 20
WM_ERASEBKGND 화면의깜빡임제거 화면전체를다시그릴때유용함 추가 여기에서왼쪽버튼누르고마우스움직이면마구깜빡임 클릭 OnErase Bkgnd 가먼저실행됨 OnDraw 와 OnEraseBkgnd 에 Break Point (F9) 잡고실행 (F5) 아무것도하지않도록주석처리 Department of Computer Engineering 21
ToolBar 개요 메뉴의기능중자주사용되는것을버튼형태로만든것 모양은다르지만 ID 를 Menu 와같게지정하여동일한이벤트발생 CFrameWnd 의파생클래스 (AppWizard 는 CMainFrame 이라는이름으로만들어줌 ) 에서초기화 OnCreate() 작성 VC++ 의리소스편집기를사용하여작성 Tool Tip 문자열은 Prompt 에서 \n 뒤에지정 CreateEx() 또는 SetBarStyle() 에서 ToolBar 의스타일지정 CBRS_TOOLTIPS ( 툴팁 ), CBRS_FLYBY( 상태표시줄에문자열출력 ), etc. EnableDocking() 으로 ToolBar 를 Frame Window 에붙이는 Docking 지정 CBRS_ALIGN_TOP, CBRS_ALIGN_ANY, etc. 사용 ID 를 Menu 와일치시키기만하면자동으로메뉴에서연결한메시지핸들러함수호출됨 Department of Computer Engineering 22
ToolBar 편집 ToolBar 삭제할때는 Drag 상태에서도구모음밖에 Drop ^v 로그림판에서붙여넣을수있음 ComboBox 에서메뉴를위해만들어놓은 ID 선택 1. Drag 시작 2. Drop 색이제대로나오지않음 (16 색 ) 그림출처 : http://www.pokemon.com/ Status Bar 뒤에 ToolTip 을위해 \n 빨강 추가 Toolbar 에서 True Color 를사용하려면다음링크참조 http://www.codeproject.com/kb/toolbars/truecolortoolbar.aspx Department of Computer Engineering 23
ToolBar 에 Text 넣기 ToolBar 에 Text 넣기 CFrameWnd 의 OnCreate() Bitmap 크기 버튼크기 (Bitmap 크기보다크게 ) -Debug- Department of Computer Engineering 24
Summary Relationship Diagram for Menu Menu Resource 편집 & 문자 : Alt 와같이누르면선택 Caption에 \tctrl+ 문자 추가 Accelerator Hot-Key 지정 MFC Class CWinApp CWnd CFrameWnd IDR_MAINFRAME ToolBar ID 같게지정 Bitmap 추가 Inherit IDM_ 으로시작 IDM_RED Inherited Class IDM_NONE CMyApp CMainFrame Create Prompt: Status Bar \n 툴팁 Messages Connect (AppWizard) InitInstance() CMy (Document, View, Frame, App) (AppWizard) OnCreate() WM_COMMAND On_COMMAND(IDM_..., On ) On () UPDATE_COMMAND_UI Command Notification On_UPDATE_UI(IDM_..., OnUpdate ) OnUpdate (CCmdUI *) Enable, SetCheck, SetRadio, Department of Computer Engineering 25 SetText