<4D F736F F F696E74202D203036C0E520BBE7BFEBC0DA20C0CEC5CDC6E4C0CCBDBA205BC8A3C8AF20B8F0B5E55D>

Similar documents
Microsoft PowerPoint - hci2-lecture6.ppt

Microsoft PowerPoint - hci2-lecture6.ppt

윈도우시스템프로그래밍

5장 MFC기반 다지기

그래픽 프로그래밍

오버라이딩 (Overriding)

윈도우시스템프로그래밍

[ 그림 8-1] XML 을이용한옵션메뉴설정방법 <menu> <item 항목ID" android:title=" 항목제목 "/> </menu> public boolean oncreateoptionsmenu(menu menu) { getme

<4D F736F F F696E74202D203031C0E520C0A9B5B5BFEC20C7C1B7CEB1D7B7A1B9D620B1E2C3CA5FBFB5B3B2C0CCB0F8B4EB205BC8A3C8AF20B8F0B5E55D>

Visual C++의 개요

Microsoft PowerPoint - CPP_chap6_interface(2)

Microsoft PowerPoint - hci2-lecture3.ppt

Microsoft PowerPoint - hci2-lecture3.ppt

MFC 프로그래밍

untitled

4S 1차년도 평가 발표자료

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

C++ Programming

API - Notification 메크로를통하여어느특정상황이되었을때 SolidWorks 및보낸경로를통하여알림메시지를보낼수있습니다. 이번기술자료에서는메크로에서이벤트처리기를통하여진행할예정이며, 메크로에서작업을수행하는데유용할것입니다. 알림이벤트핸들러는응용프로그램구현하는데있어

Microsoft PowerPoint - CPP_chap3

Microsoft PowerPoint - 09-CE-5-윈도우 핸들

PowerPoint Presentation

안드로이드기본 11 차시어댑터뷰 1 학습목표 어댑터뷰가무엇인지알수있다. 리스트뷰와스피너를사용하여데이터를출력할수있다. 2 확인해볼까? 3 어댑터뷰 1) 학습하기 어댑터뷰 - 1 -

Microsoft PowerPoint - hci2-lecture5-messagemap.ppt

(Microsoft PowerPoint - 07\300\345.ppt [\310\243\310\257 \270\360\265\345])

04장 메시지 처리 유형

윈도우시스템프로그래밍

gnu-lee-oop-kor-lec10-1-chap10

PowerPoint 프레젠테이션

Studuino소프트웨어 설치

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

슬라이드 1

게임 기획서 표준양식 연구보고서

<33372DC0A9B5B5BFECC7C1B7CEB1D7B7A1B9D62E687770>

1

Microsoft PowerPoint - hci2-lecture10.ppt

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

var answer = confirm(" 확인이나취소를누르세요."); // 확인창은사용자의의사를묻는데사용합니다. if(answer == true){ document.write(" 확인을눌렀습니다."); else { document.write(" 취소를눌렀습니다.");

12 강. 문자출력 Direct3D 에서는문자를출력하기위해서 LPD3DXFONT 객체를사용한다 LPD3DXFONT 객체생성과초기화 LPD3DXFONT 객체를생성하고초기화하는함수로 D3DXCreateFont() 가있다. HRESULT D3DXCreateFont

<4D F736F F F696E74202D20C1A63038C0E520C5ACB7A1BDBABFCD20B0B4C3BC4928B0ADC0C729205BC8A3C8AF20B8F0B5E55D>

Microsoft PowerPoint - chap02-C프로그램시작하기.pptx

슬라이드 1

슬라이드 1

윈도우시스템프로그래밍

Microsoft PowerPoint - MFC-교재.ppt

NTD36HD Manual

슬라이드 1

9 차시고급위젯다루기 1 학습목표 날짜 / 시간과관련된위젯을배운다. 웹뷰를사용하여간단한웹브라우저기능을구현한다. 매니패스트파일의설정법을배운다. 2 확인해볼까? 3 날짜 / 시간위젯 1) 활동하기 활동개요

Microsoft PowerPoint - 04windows.ppt

1. 상속의기본개념 다음과같은문제를위한클래스설계 자동차 속성 : 색상, 배기량, 현재속도 메서드 : 가속하라, 멈춰라, 시동을켜라 트럭 속성 : 색상, 배기량, 현재속도, 최대중량 메서드 : 가속하라, 멈춰라, 시동을켜라 택시 속성 : 색상, 배기량, 현재속도, 요금,

슬라이드 1

Programming hwp

Microsoft PowerPoint - 06-Body Data Class.pptx

Microsoft PowerPoint - 07-Data Manipulation.pptx

JAVA PROGRAMMING 실습 08.다형성

JAVA 프로그래밍실습 실습 1) 실습목표 - 메소드개념이해하기 - 매개변수이해하기 - 새메소드만들기 - Math 클래스의기존메소드이용하기 ( ) 문제 - 직사각형모양의땅이있다. 이땅의둘레, 면적과대각

10 장세균전프로그래밍 10.1 게임룰 (1) 사람과컴퓨터가싸우는 2인용보드게임이다. (2) 사람이먼저움직이고, 컴퓨터가움직인다. (3) 세균을가로및세로방향으로 2칸까지빈칸으로이동시킬수있다. (4) 1칸을이동할경우에는복제가된다. (5) 이동한후주변세균은내편으로바뀐다.

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - hci2-lecture1.ppt

Microsoft PowerPoint - 09-Object Oriented Programming-3.pptx

8 장데이터베이스 8.1 기본개념 - 데이터베이스 : 데이터를조직적으로구조화한집합 (cf. 엑셀파일 ) - 테이블 : 데이터의기록형식 (cf. 엑셀시트의첫줄 ) - 필드 : 같은종류의데이터 (cf. 엑셀시트의각칸 ) - 레코드 : 데이터내용 (cf. 엑셀시트의한줄 )

chap 5: Trees

Microsoft Word - ntasFrameBuilderInstallGuide2.5.doc

윈도우 프로그래밍의 개념

vRealize Automation용 VMware Remote Console - VMware

PowerPoint Presentation

Programming hwp

학습목표 메뉴를추가하는방법을이해하고실습할수있다. 프로그램의기본설정 (settings) 을정의하는방법을알고실습할수있다. 대화상자를여는방법을알고실습할수있다. 로그메시지로디버깅하는방법을이해한다. 디버거로디버깅하는방법을이해한다.

Microsoft PowerPoint UI-Event.Notification(1.5h).pptx

1장 윈도우 프로그래밍 들어가기

쉽게 풀어쓴 C 프로그래밍

Programming hwp

Endpoint Protector - Active Directory Deployment Guide

Microsoft Word - hci07-final-answer.doc

PowerPoint Presentation

1. 클래스와배열 int 형배열선언및초기화 int ary[5] = 1, 2, 3, 4, 5 ; for (int i = 0; i < 5; i++) cout << "ary[" << i << "] = " << ary[i] << endl; 5 장클래스의활용 1

슬라이드 1

슬라이드 1

슬라이드 1

어댑터뷰

제11장 프로세스와 쓰레드

슬라이드 1

ReadMe First-MM Pro v8.3 InD KR

q 이장에서다룰내용 1 객체지향프로그래밍의이해 2 객체지향언어 : 자바 2

[제1강] 텍스트를 입력하세요

PowerPoint 프레젠테이션

Microsoft PowerPoint - hci2-lecture1.ppt

Windows 8에서 BioStar 1 설치하기

소프트웨어공학 Tutorial #2: StarUML Eun Man Choi

System Recovery 사용자 매뉴얼

ThisJava ..

[ 그림 7-1] 프로젝트 res 폴더 이미지뷰 [ 예제 7-1] 이미지뷰 1 <LinearLayout 2 ~~~~ 중간생략 ~~~~ 3 android:orientation="vertical" > 4 <ImageView

UI TASK & KEY EVENT

설계란 무엇인가?

설계란 무엇인가?

제 14 장포인터활용 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

슬라이드 1

1. 외국어 메뉴판 만들기 (상세 메뉴판) 외국어 메뉴판 만들기 서비스 중 상세 메뉴판 만들기 코너를 이용하기 위해서는, 먼저 한국관광공사 홈페이지 ( 회원가입을 해야 합니다. 상세 메뉴판 만들기 코너를 이용하면, 메뉴

윈도우 프로그래밍의 개념

윈도우시스템프로그래밍

Transcription:

06: 사용자인터페이스 학습목표 메뉴명령을처리하고메뉴항목을적절하게갱신하는기법을익 힌다. 컨텍스트메뉴와시스템메뉴를다루는방법을익힌다. 툴바를생성하고사용하는방법을익힌다. 상태바를생성하고사용하는방법을익힌다.

메뉴용어 (1/6) 최상위메뉴 = 메뉴바 최상위메뉴 = 메뉴바 1

메뉴용어 (2/6) 메뉴항목 용어 의미 1 명령항목명령 (Command) 을수행하는메뉴항목. 선택하면 WM_COMMAND 메시지가발생한다. 2 팝업항목하위메뉴를화면에표시하는메뉴항목. 선택해도 WM_COMMAND 메시지가발생하지않는다. 명령항목 팝업항목 2

메뉴용어 (3/6) 하위메뉴 팝업항목을선택했을때화면에나타나는메뉴 드랍다운메뉴 최상위메뉴항목을클릭했을때펼쳐지는메뉴 드랍다운메뉴 = 팝업메뉴 3

메뉴용어 (4/6) 컨텍스트메뉴 = 단축메뉴 마우스오른쪽버튼을누를때열리는메뉴 마우스커서의위치또는현재작업하고있는내용에따라서로다른메뉴항목이표시됨 컨텍스트메뉴 = 단축메뉴 = 팝업메뉴 4

메뉴용어 (5/6) 팝업메뉴 사용자가무엇인가를선택했을때메뉴가튀어나온다 (Pop Up) 는뜻으로만든용어 드랍다운메뉴와컨텍스트메뉴가여기에속함 시스템메뉴 = 윈도우메뉴 시스템메뉴 = 윈도우메뉴 5

메뉴용어 (6/6) 액세스키와단축키 액세스키 메뉴가열린상태에서특정항목을키보드로빠르게선택 단축키 메뉴가열리지않은상태에서도키조합으로메뉴항목의기능을곧바로실행 액세스키 단축키 6

메뉴클래스 MFC 클래스 CMenu 메뉴를다룰수있는다양한함수제공 CCmdUI CObject의파생클래스가아닌독립된클래스 메뉴와툴바및상태바에필요한기능지원 7

메뉴생성 (1/9) 두가지방법 메뉴리소스 프로그램실행중메뉴생성 메뉴리소스작성 8

메뉴생성 (2/9) AppWizard 가생성한코드 BOOL CSimple2App::InitInstance() { CMainFrame* pframe = new CMainFrame; m_pmainwnd = pframe; pframe->loadframe(idr_mainframe, WS_OVERLAPPEDWINDOW FWS_ADDTOTITLE, NULL, NULL); pframe->showwindow(sw_show); pframe->updatewindow(); } return TRUE; 9

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

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

메뉴생성 (5/9) 메뉴항목속성 (cont'd) 속성 Grayed Help Prompt 의미 메뉴항목이흐리게표시되어현재사용할수없음을나타낸다. 윈도우의오른쪽끝위치에메뉴가표시되도록한다. 주로 Help 메뉴항목에이속성을설정한다. MFC로작성한프로그램에서만사용할수있는속성으로, 툴바와상태바에표시될문자열을나타낸다.'\n' 을기준으로앞쪽문자열은상태바에표시되며뒤쪽문자열은툴팁에표시된다. 예 ) 선택부분을잘라내어클립보드에넣습니다 \n잘라내기 12

메뉴생성 (6/9) 프로그램실행중전체메뉴생성하기 int CMainFrame::OnCreate(LPCREATESTRUCT lpcreatestruct) { // 생략... CMenu menumain; menumain.createmenu(); CMenu menupopup; menupopup.createpopupmenu(); menupopup.appendmenu(mf_string, 201, " 빨강 (&R)"); menupopup.appendmenu(mf_string, 202, " 초록 (&G)"); menupopup.appendmenu(mf_string, 203, " 파랑 (&B)"); ); 13

메뉴생성 (7/9) 프로그램실행중전체메뉴생성하기 (cont'd) menumain.appendmenu(mf_popup, (UINT_PTR)menuPopup.Detach(), " 색상 (&C)"); SetMenu(&menuMain); menumain.detach(); } return 0; 14

메뉴생성 (8/9) 프로그램실행중추가메뉴생성하기 int CMainFrame::OnCreate(LPCREATESTRUCT lpcreatestruct) { // 생략... CMenu Popup1; Popup1.CreatePopupMenu(); Popup1.AppendMenu(MF_STRING, 301, "&1"); Popup1.AppendMenu(MF_STRING, 302, "&2"); Popup1.AppendMenu(MF_STRING, 303, "&3"); Popup1.AppendMenu(MF_STRING, 304, "&4"); CMenu Popup2; Popup2.CreatePopupMenu(); Popup2.AppendMenu(MF_STRING MF_CHECKED, 201, "Item&1"); 15

메뉴생성 (9/9) 프로그램실행중추가메뉴생성하기 (cont'd) Popup2.AppendMenu(MF_POPUP, POPUP, (UINT_PTR)Popup1.Detach(), "Item&2"); Popup2.AppendMenu(MF_STRING, 203, "Item&3"); CMenu *ptoplevel = GetMenu(); ptoplevel->appendmenu(mf_popup, (UINT_PTR)Popup2.Detach(), p (), " 연습 (&X)"); ); } return 0; 16

메뉴명령처리 (1/3) 메뉴명령처리과정 1 명령항목을마우스나키보드로선택 2 WM_COMMAND 메시지발생 3 WM_COMMAND 메시지핸들러에서메뉴명령처리 MFC 의메뉴명령처리방법 각각의메뉴항목에대해함수를따로작성 명령핸들러 (Command Handler) ON_COMMAND( 메뉴ID, 함수명 ) 매크로를이용하여메뉴항목과함수연결 명령라우팅 명령핸들러를작성하는위치에관계없이처리 17

메뉴명령처리 (2/3) 메뉴명령처리예 BEGIN_MESSAGE_MAP(CChildView,CWnd MAP(CChildView CWnd )... ON_COMMAND(ID_COLOR_RED, OnColorRed) ON_COMMAND(ID_COLOR_GREEN, COLOR OnColorGreen) ON_COMMAND(ID_COLOR_BLUE, OnColorBlue)... END_MESSAGE_MAP() MAP() void CChildView::OnColorRed() { m_color = RGB(255, 0, 0); Invalidate(); } 18

메뉴명령처리 (3/3) 메뉴명령처리예 (cont'd) void CChildView::OnColorGreen() { m_color = RGB(0, 255, 0); Invalidate(); } void CChildView::OnColorBlue() C l { m_color = RGB(0, 0, 255); Invalidate(); } 19

메뉴항목갱신 (1/5) 메뉴항목갱신예 20

메뉴항목갱신 (2/5) MFC 의메뉴항목갱신방법 각각의메뉴항목에대해함수를따로작성 명령갱신핸들러 (Command Update Handler) ON_UPDATE_COMMAND_UI( 메뉴 ID, 함수명 ) 매크로를이용하여메뉴항목과함수연결 명령라우팅 명령핸들러와마찬가지로명령갱신핸들러도작성하는위치에관계없이처리 21

메뉴항목갱신 (3/5) 메뉴항목갱신예 BEGIN_MESSAGE_MAP(CChildView,CWnd MAP(CChildView CWnd )... ON_UPDATE_COMMAND_UI(ID_COLOR_RED, OnUpdateColorRed) ON_UPDATE_COMMAND_UI(ID_COLOR_GREEN, UI(ID COLOR OnUpdateColorGreen) ON_UPDATE_COMMAND_UI(ID_COLOR_BLUE, OnUpdateColorBlue)... END_MESSAGE_MAP() void CChildView::OnUpdateColorRed(CCmdUI* d C l d(cc dui* pcmdui) { pcmdui->setcheck(m_color == RGB(255, 0, 0)); } 22

메뉴항목갱신 (4/5) 메뉴항목갱신예 (cont'd) void CChildView::OnUpdateColorGreen(CCmdUI* pcmdui) { pcmdui->setcheck(m_color == RGB(0, 255, 0)); } void CChildView::OnUpdateColorBlue(CCmdUI* pcmdui) { pcmdui->setcheck(m_color == RGB(0, 0, 255)); } 23

메뉴항목갱신 (5/5) CCmdUI 클래스멤버함수 멤버함수의미사용예 Enable( ) 활성화상태변경 pcmdui->enable(b_drawmode); SetCheck( ) 체크상태변경 pcmdui->setcheck(m >SetCheck(m_colorcolor == RGB(255, 0, 0)); SetRadio( ) 라디오표시상태변경 pcmdui->setradio(m_color == RGB(255, 0, 0)); SetText( ) 문자열변경 pcmdui->settext("light On"); 24

컨텍스트메뉴 (1/4) WM_CONTEXTMENU 메시지발생상황 클라이언트영역또는비클라이언트영역에서마우스오른쪽버튼을클릭하는경우 Shift + F10 키조합을누른경우 가상키코드 VK_APPS 에해당하는키 ( ) 를누른경우 WM_CONTEXTMENU NU 메시지핸들러 afx_msg void OnContextMenu (CWnd* pwnd, CPoint pos) ; pwnd - 마우스커서아래쪽에있는윈도우 pos - 마우스커서의위치 ( 스크린좌표 ) 25

컨텍스트메뉴 (2/4) CMenu::TrackPopupMenu() 함수 BOOL TrackPopupMenu (UINT nflags, int x, int y, CWnd* pwnd, LPCRECT lprect = 0) ; nflags TPM_LEFTALIGN, TPM_CENTERALIGN, TPM_RIGHTALIGN TPM_LEFTBUTTON, TPM_RIGHTBUTTON 26

컨텍스트메뉴 (3/4) x, y 컨텍스트메뉴가표시될위치 ( 스크린좌표 ) pwnd 컨텍스트메뉴에서발생한 WM_COMMAND 메시지를받을윈도우 lprect 마우스버튼을클릭하더라도컨텍스트메뉴가닫히지않는사각형영역 ( 스크린좌표 ) 27

컨텍스트메뉴 (4/4) 컨텍스트메뉴사용예 void CChildView::OnContextMenu(CWnd* C tm d* pwnd, CPoint point) { CMenu menu; menu.loadmenu(idr_mainframe); CMenu* pmenu = menu.getsubmenu(4); pmenu->trackpopupmenu( p p TPM_LEFTALIGN TPM_RIGHTBUTTON, point.x, point.y, AfxGetMainWnd()); } 28

시스템메뉴 (1/2) 시스템메뉴조작하기 CWnd::GetSystemMenu() 함수를이용하여시스템메뉴에대한 CMenu 포인터를얻는다. CMenu 클래스가제공하는다양한함수 (AppendMenu(), InsertMenu(), DeleteMenu(),...) 를적용한다. 29

시스템메뉴 (2/2) 주의사항 시스템메뉴를변경하려면 GetSystemMenu(FALSE) 를, 시스템메뉴를초기상태로되돌리려면 GetSystemMenu(TRUE) 를호출한다. 시스템메뉴에새로운메뉴항목을추가할때메뉴 ID는반드시 16의정수배가되어야한다. 시스템메뉴항목을선택하면 WM_COMMAND 가아닌 WM_SYSCOMMAND 메시지가발생한다. 30

가속기 가속기 = 단축키 메뉴항목을곧바로실행할수있는키조합 가속기리소스추가 31

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

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

툴바 (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 34

툴바 (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); ANY); DockControlBar(&m_wndToolBar); } return 0; 35

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

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

상태바 (3/4) 상태바코드 class CMainFrame : public CFrameWnd { // 생략... protected: CStatusBar m_wndstatusbar; CToolBar m_wndtoolbar; CChildView m_wndview; // 생략... }; 38

상태바 (4/4) 상태바코드 (cont'd) int CMainFrame::OnCreate(LPCREATESTRUCT C lpcreatestruct) t) { // 생략... if (!m_wndstatusbar.create(this)!m_wndstatusbar.setindicators(indicators, sizeof(indicators)/sizeof(uint))) ( ))) } { TRACE0("Failed to create status bar\n"); return -1; } // 생략... 39