윈도우 프로그래밍의 개념

Similar documents
윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

PowerPoint Template

그래픽 프로그래밍

Lab 3. 실습문제 (Single linked list)_해답.hwp

DLL(Dynamic Linked Library)

tiawPlot ac 사용방법

윈도우시스템프로그래밍

윈도우시스템프로그래밍

윈도우시스템프로그래밍

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

Visual C++의 개요

PowerPoint Presentation

윈도우시스템프로그래밍

Microsoft Word - hci08-final-answer.doc

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

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

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

슬라이드 1

04장 메시지 처리 유형

PowerPoint 프레젠테이션

Visual Basic 기본컨트롤

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

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

PowerPoint Presentation

제8장 자바 GUI 프로그래밍 II

윈도우즈프로그래밍(1)

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

View Licenses and Services (customer)

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

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp


. 스레드 (Thread) 란? 스레드를설명하기전에이글에서언급되는용어들에대하여알아보도록하겠습니다. - 응용프로그램 ( Application ) 사용자에게특정서비스를제공할목적으로구현된응용프로그램을말합니다. - 컴포넌트 ( component ) 어플리케이션을구성하는기능별요

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

Microsoft PowerPoint - Java7.pptx

슬라이드 1

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

Microsoft PowerPoint - 09-CE-14-리스트콤보박스

쉽게 풀어쓴 C 프로그래밍

Microsoft PowerPoint - C++ 5 .pptx

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

Javascript

UI TASK & KEY EVENT

제이쿼리 (JQuery) 정의 자바스크립트함수를쉽게사용하기위해만든자바스크립트라이브러리. 웹페이지를즉석에서변경하는기능에특화된자바스크립트라이브러리. 사용법 $( 제이쿼리객체 ) 혹은 $( 엘리먼트 ) 참고 ) $() 이기호를제이쿼리래퍼라고한다. 즉, 제이쿼리를호출하는기호

Visual Basic 반복문

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

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

Microsoft PowerPoint - hci2-lecture11.ppt

Programming hwp

슬라이드 1

Visual Basic Visual Basic 소개

Programming hwp

KNK_C_05_Pointers_Arrays_structures_summary_v02

Microsoft PowerPoint - CPP_chap7_dialogbox(2)

제 1장 C#의 개요

iii. Design Tab 을 Click 하여 WindowBuilder 가자동으로생성한 GUI 프로그래밍환경을확인한다.

화판_미용성형시술 정보집.0305

[ 마이크로프로세서 1] 2 주차 3 차시. 포인터와구조체 2 주차 3 차시포인터와구조체 학습목표 1. C 언어에서가장어려운포인터와구조체를설명할수있다. 2. Call By Value 와 Call By Reference 를구분할수있다. 학습내용 1 : 함수 (Functi

Microsoft PowerPoint - chap06-1Array.ppt

슬라이드 1

Microsoft PowerPoint - 07-Data Manipulation.pptx

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

Microsoft PowerPoint - hci2-lecture11.ppt

Microsoft Word - src.doc

Chapter 1

PathEye 공식 블로그 다운로드 받으세요!! 지속적으로 업그래이드 됩니다. 여러분의 의견을 주시면 개발에 반영하겠 습니다.

MVVM 패턴의 이해

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

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

슬라이드 1

다른 JSP 페이지호출 forward() 메서드 - 하나의 JSP 페이지실행이끝나고다른 JSP 페이지를호출할때사용한다. 예 ) <% RequestDispatcher dispatcher = request.getrequestdispatcher(" 실행할페이지.jsp");

아이콘의 정의 본 사용자 설명서에서는 다음 아이콘을 사용합니다. 참고 참고는 발생할 수 있는 상황에 대처하는 방법을 알려 주거나 다른 기능과 함께 작동하는 방법에 대한 요령을 제공합니다. 상표 Brother 로고는 Brother Industries, Ltd.의 등록 상

1 1 제 1 장 C# 의개요 1.1 소개 1.2 콘솔 / 윈폼애플리케이션 C# 개발환경 콘솔애플리케이션 윈폼애플리케이션 C# 프로그램실행과정 1.3 기본특징 자료형 연산자 배열 스트

Chapter 4. LISTS

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

4장기본프로그래밍2

Microsoft PowerPoint - ÀÚ¹Ù08Àå-1.ppt

슬라이드 1

Flex Builder 2 & 차트

1

chap 5: Trees

<4D F736F F F696E74202D20B8B6C0CCC5A9B7CEC7C1B7CEBCBCBCAD202839C1D6C2F7207E203135C1D6C2F >

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

1. 객체의생성과대입 int 형변수 : 선언과동시에초기화하는방법 (C++) int a = 3; int a(3); // 기본타입역시클래스와같이처리가능 객체의생성 ( 복습 ) class CPoint private : int x, y; public : CPoint(int a

<C6F7C6AEB6F5B1B3C0E72E687770>

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

슬라이드 1

1장. 유닉스 시스템 프로그래밍 개요

PowerPoint Presentation

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

17장 클래스와 메소드

고객 카드

슬라이드 1

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

Microsoft PowerPoint - 11주차_Android_GoogleMap.ppt [호환 모드]

쉽게 풀어쓴 C 프로그래밍

MFC 프로그래밍

PowerPoint 프레젠테이션

Transcription:

제 9 장고급컨트롤과리본 9.1 MFC Feature 컨트롤실습 9-1 간단한명함제작프로그램만들기 9.2 리본실습 9.2 리본메뉴및각종리본컨트롤사용하기

MFC Feature 컨트롤 MFC 버튼컨트롤 MFC Button 은기본적으로 CButton 과같은속성을갖고있음. 사용목적에따라 Radio, Check, Command 버튼으로스타일을변경할수있다. CButton 클래스를출력면에서다양하게보완한것으로, 다양한 Flat 스타일, 배경및텍스트색상의변경, 커서모양, Tool Tip, 아이콘, 그림출력등의제어할수있다.

MFC Feature 컨트롤 MFC 셀리스트와셀트리컨트롤 각각 CListCtrl, CTreeCtrl 클래스를윈도우상의폴더구조를출력하고쉽게접근할수있도록특성화시켜놓은컨트롤

MFC Feature 컨트롤 MFC 프로퍼티그리드컨트롤 다량의정보와속성을직관적으로표현할수있으며, 속성설정을위한콤보상자, 에디트상자, 칼라상자, 폰트상자등다양한아이템컨트롤을통해매우쉽게속성을변경할수있는컨트롤 또한유사한정보끼리그룹을생성할수있으며, 항목별또는사전순으로정렬할수있음. 대표적인사용예시가 Visual Studio 의 [ 속성 ] 창이다.

MFC Feature 컨트롤 MFC VS 리스트박스컨트롤 여러개의항목을출력한다는측면에서리스트상자와매우흡사하지만, CListBox 클래스의기능을상속받은것은아님. 기본적으로추가, 삭제, 위로이동, 아래로이동을위한 4 가지표준버튼을제공

MFC Feature 컨트롤 MFC 에디트브라우저컨트롤 윈도우상의폴더또는파일의위치를입력하기위한것으로, 맨오른쪽 Browse 버튼을누르면 [ 파일열기 ] 대화상자가출력되어해당위치를선택하게하는컨트롤

MFC Feature 컨트롤 MFC 마스크에디트컨트롤 Input Mask 를특정문자를세팅함으로써특정형식을사용자에게보여주어형식에맞게입력할수있게하는컨트롤

MFC Feature 컨트롤 MFC 폰트콤보박스 기본적으로현재윈도우에설치된폰트의목록을보여주고선택을하기위한컨트롤 폰트의크기나색상은지원하지않음

실습 9-1 간단한명함제작프로그램만들기 이번실습은간단한명함출력프로그램을작성하는것으로 CVSListBox 를이용하여명함을추가, 삭제를하고, MFC PropertyGrid 컨트롤을이용하여명함의정보를자세히출력하도록할것이다

실습 9-1 프로그램의기능 CVSListBox 컨트롤을이용하여명함데이터를추가및삭제하도록한다. MFC PropertyGrid 컨트롤을이용하여명함의정보를출력한다. 대화상자의컨트롤과 MFC PropertyGrid 컨트롤의속성변경에따라명함을출력한다.

실습 9-1 프로그램작성순서 1) 대화상자기반의프로젝트를생성한다 2) 대화상자에컨트롤을배치하고속성을설정한다. Picture 컨트롤 3 개, MFC ColorButton 컨트롤 2 개, MFC FontComboBox 컨트롤등 3) 명함을저장하기위한구조체선언과클래스에변수를추가한다. 4) 각컨트롤들을멤버변수에연결하고, 명함데이터처리함수를추가한다.

실습 9-1 프로그램작성순서 5) 명함을추가, 삭제하고목록과선택된명함의속성을출력한다. 6) 각컨트롤들을초기화하고명함출력함수를추가한다. OnInitDialog() 함수에서각컨트롤들을초기화한다. 7) 명함의배경색, 연락처텍스트색상, 글꼴을변경한다. 8)MFC Property Grid 아이템변경에대한핸들러함수를만든다. 9) 프로그램을실행시킨다.

실습 9-1 실행결과

리본사용자인터페이스 리본 Microsoft 는오피스 2007 의 유연한사용자인터페이스 의일부로리본을도입 명령버튼과아이콘이있는패널로이루어져있으며명령어들은탭으로모아구성 탭안의임의의영역에있는동안마우스스크롤휠을움직이면리본이탭을통해순환

리본사용자인터페이스 리본메뉴의구성 Ribbon Bar 모든구성요소들을가지고있는전역객체 Application Button 파일메뉴를별도로구성하고있음 Quick Access Toolbar 사용자가자주사용하는기능을등록하여사용할수있는도구상자 우측의화살표를눌러나오는메뉴를통하여제어

리본사용자인터페이스 리본메뉴의구성 ( 계속 ) Category 소프트웨어에서제공하는기능을독립적으로분류해놓은것 Panel 해당기능을수행하기위한액션들을분류해놓은것 Panel 내부는각종유용한컨트롤들이배치되어사용자와인터페이스하도록설계되어있음

리본사용자인터페이스 구성요소별구현된클래스 구성요소 Ribbon Bar Application Button Quick Access Toolbar Category Panel Base Element 구현클래스 CMFCRibbonBar CMFCRibbonApplicationButton CMFCRibbonQuickAccessToolBar CMFCRibbonCategory CMFCRibbonPanel CMFCRibbonBaseElement

리본사용자인터페이스 리본컨트롤클래스 리본컨트롤은일반적인컨트롤과 MFC Feature 컨트롤의기능을리본메뉴상에서동일하게사용할수있도록여러종류로구현되어있음 버튼형태컨트롤 버튼, 체크박스, 칼라버튼, 에디트박스, 콤보상자, 폰트콤보상자등 비 - 버튼형태컨트롤 슬라이더, 탭, 프로그레스바등

실습 9-2리본메뉴및각종리본컨트롤사용하기 이번실습은리본디자이너 (Ribbon Designer) 를통하여그리기명령, 그리기객체의선택, 텍스트의글꼴, 크기, 색상등을설정하기위한리본메뉴를편집하고, 리본메뉴의각컨트롤에대한이벤트처리를한다.

실습 9-2 프로그램의기능 그리기객체의선택, 속성설정을위한리본메뉴를구성하도록한다. 리본메뉴를통하여그리기명령과색상, 제어점출력여부등의기능을구현한다. 리본메뉴를통하여텍스트의입력, 글꼴및크기, 색상을설정하도록한다. 리본컨트롤의슬라이더를이용하여뷰영역의확대 / 축소를조절한다.

실습 9-2 프로그램작성순서 1) Office 스타일의단일문서기반의프로젝트를생성한다. 2) 리본디자이너를사용하여리본메뉴를구성한다.. 3) 객체그리기를위한필요한변수를선언한다. 정점의좌표를저장하는멤버변수 정점의개수를저장하는멤버변수 윈도우에출력될문자열을저장하는멤버변수

실습 9-2 프로그램작성순서 4) 윈도우에그리기객체와텍스트출력을위한함수를추가한다.. 직선, 사각형, 원, 다각형을그리는함수 확대 / 축소를초기화하는함수 5) 러버밴드를위한함수를추가한다. 6) 각리본메뉴의컴포넌트에대한이벤트처리를추가한다. 7) 프로그램을실행시킨다.

실습 9-2 실행화면

실습 9-2 실행화면

연습문제 9-1MFC Property Grid 컨트롤을이용한회원정보관리프로그램만들기 List 컨트롤을이용하여회원리스트를출력하고, 버튼을통해서회원추가 / 삭제를수행한다. MFC Property Grid 컨트롤은현재선택된회원정보를출력하고, 정보를수정한다.

BOOL CExercise9_1Dlg::OnInitDialog() m_listmembers.insertcolumn(0, _T(" 회원번호 "), LVCF_WIDTH, 60); m_listmembers.insertcolumn(1, _T(" 이름 "), LVCF_WIDTH, 80); m_listmembers.insertcolumn(2, _T(" 성별 "), LVCF_WIDTH, 40); m_listmembers.insertcolumn(3, _T(" 연락처 "), LVCF_WIDTH, 120); // 명함 Property Grid 를생성하고초기화한다. CRect rectdummy, rc; rectdummy.setrectempty(); if (!m_propmember.create(ws_visible WS_CHILD, rectdummy, this, 2)) { TRACE0(" 속성표를만들지못했습니다. \n"); return -1; // 만들지못했습니다. } GetDlgItem(IDC_STATIC_PROPGRID)->GetWindowRect(&rc); ScreenToClient(&rc); m_propmember.movewindow(&rc); UpdateMemberInfo(Member()); ((CButton*) GetDlgItem(IDC_RADIO_MALE))->SetCheck(TRUE); return TRUE; // 포커스를컨트롤에설정하지않으면 TRUE를반환합니다.

void CExercise9_1Dlg::UpdateMemberInfo(Member m) m_propmember.removeall(); m_propmember.enableheaderctrl(false); m_propmember.setvsdotnetlook(); m_propmember.enabledescriptionarea(); // 1. 개인신상정보 CMFCPropertyGridProperty* pgroupinfo = new CMFCPropertyGridProperty(_T(" 회원정보 ")); pgroupinfo->addsubitem(new CMFCPropertyGridProperty(_T(" 이름 "), m.strname, _T(" 이름을입력하세요."), 0)); CMFCPropertyGridProperty* psex = new CMFCPropertyGridProperty(_T(" 성별 "), m.bsex? _T(" 남 "):_T(" 여 "), _T(" 성별을선택하세요."), 1); psex->addoption(_t(" 남 ")); psex->addoption(_t(" 여 ")); psex->allowedit(false); pgroupinfo->addsubitem(psex);

void CExercise9_1Dlg::UpdateMemberInfo(Member m) pgroupinfo->addsubitem(new CMFCPropertyGridProperty(_T(" 연락처 "), m.strphone, _T(" 연락처를입력하세요."), 2)); m_propmember.addproperty(pgroupinfo); // 2. 출력양식정보 CMFCPropertyGridProperty* pgroupprint = new CMFCPropertyGridProperty(_T(" 보기 ")); CMFCPropertyGridProperty* pview = new CMFCPropertyGridProperty(_T(" 리스트뷰 "), _T("Detail"), _T(" 리스트컨트롤보기 "), 3); pview->addoption(_t("detail")); pview->addoption(_t("list")); pview->addoption(_t("tile")); pview->allowedit(false); pgroupprint->addsubitem(pview); m_propmember.addproperty(pgroupprint); m_propmember.updatedata(false);}

void CExercise9_1Dlg::OnClickedButtonAdd() UpdateData(TRUE); Member m; m.nid = m_ncount!=0? m_members[m_ncount-1].nid+1 : 1; m.strname = m_strname; m.bsex = m_bsex; m.strphone = _T("010-123-4567"); m_members[m_ncount++] = m; UpdateMembers(); UpdateMemberInfo(m_Members[m_nCount-1]); m_strname.empty(); m_nselectedmember = m_ncount-1; UpdateData(FALSE);}

void CExercise9_1Dlg::UpdateMembers(void) m_listmembers.deleteallitems(); { CString str; for(int i=0; i<m_ncount; i++) str.format(_t("%d"), m_members[i].nid); m_listmembers.insertitem(i, str); m_listmembers.setitem(i, 1, LVIF_TEXT, m_members[i].strname, -1, 0, 0, 0); str = m_members[i].bsex? _T(" 남 ") : _T(" 여 "); m_listmembers.setitem(i, 2, LVIF_TEXT, str, -1, 0, 0, 0); m_listmembers.setitem(i, 3, LVIF_TEXT, m_members[i].strphone, -1, 0, 0, 0); }}

void CExercise9_1Dlg::OnRadioFemale() { // TODO: 여기에명령처리기코드를추가합니다. m_bsex = false; }

void CExercise9_1Dlg::OnRadioMale() { // TODO: 여기에명령처리기코드를추가합니다. m_bsex = true; }

void CExercise9_1Dlg::OnItemchangedListMembers(NMHDR *pnmhdr, LRESULT *presult) LPNMLISTVIEW pnmlv = reinterpret_cast<lpnmlistview>(pnmhdr); // TODO: 여기에컨트롤알림처리기코드를추가합니다. m_nselectedmember = pnmlv->iitem; UpdateMemberInfo(m_Members[m_nSelectedMember]); *presult = 0;

void CExercise9_1Dlg::OnClickedButtonRemove() if( m_nselectedmember<0 ) return; if( MessageBox(_T(" 정말로삭제하시겠습니까?"), _T(" 확인 "), MB_YESNO MB_ICONQUESTION)!= IDYES ) return; if( m_nselectedmember< (m_ncount-1) ) memcpy( &m_members[m_nselectedmember], &m_members[m_nselectedmember+1], sizeof(member)*(m_ncount-m_nselectedmember-1)); m_ncount--; UpdateMembers();

LRESULT CExercise9_1Dlg::OnPropertyChanged(WPARAM wparam, LPARAM lparam) CMFCPropertyGridProperty* pproperty = (CMFCPropertyGridProperty*)lParam; { { switch(pproperty->getdata()) case 0 :// 이름 m_members[m_nselectedmember].strname = pproperty->getvalue(); break; case 1 :// 성별 if( (CString)pProperty->GetValue() == _T(" 남 ") ) m_members[m_nselectedmember].bsex = true; else m_members[m_nselectedmember].bsex = false; } break; case 2:// 연락처 m_members[m_nselectedmember].strphone = pproperty->getvalue(); break; case 3 :// 리스트뷰보기 if( ((CString)pProperty->GetValue())== _T("Detail") ) m_listmembers.setview(lv_view_details); else if( ((CString)pProperty->GetValue())== _T("List") ) m_listmembers.setview(lv_view_list); else m_listmembers.setview(lv_view_tile); } break; UpdateMembers(); return 0L;

연습문제 9-1MFC Property Grid 컨트롤을이용한회원정보관리프로그램만들기 실행결과