윈도우 프로그래밍의 개념

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

윈도우 프로그래밍의 개념

윈도우 프로그래밍의 개념

<4D F736F F F696E74202D20C1A C0E520B5B5C5A5B8D5C6AE20C6C4C0CF20C0D4C3E2B7C220B9D720B4D9BEE7C7D120BAE420C5ACB7A1BDBA2E BC8A3C8AF20B8F0B5E55D>

그래픽 프로그래밍

DLL(Dynamic Linked Library)

Microsoft PowerPoint - hci2-lecture11.ppt

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

Microsoft PowerPoint - hci2-lecture11.ppt

PowerPoint Template

윈도우시스템프로그래밍

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

윈도우시스템프로그래밍

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

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

chap 5: Trees

PowerPoint 프레젠테이션

<4D F736F F F696E74202D20C1A63034B0AD202D20C7C1B7B9C0D3B8AEBDBAB3CABFCD20B9ABB9F6C6DBC0D4B7C2>

Microsoft Word - src.doc

윈도우시스템프로그래밍

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

<4D F736F F F696E74202D B3E22032C7D0B1E220C0A9B5B5BFECB0D4C0D3C7C1B7CEB1D7B7A1B9D620C1A638B0AD202D20C7C1B7B9C0D320BCD3B5B5C0C720C1B6C0FD>

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

Microsoft Word - hci08-final-answer.doc

Chapter 4. LISTS

Chapter 4. LISTS

Visual C++의 개요

슬라이드 1

슬라이드 1

Microsoft PowerPoint - CPP_chap7_dialogbox(2)

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

슬라이드 1

윈도우시스템프로그래밍

<B9CCB5F0BEEE20C1A4BAB8C3B3B8AE2E687770>

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

1장. 리스트

Microsoft Word - hci07-final-answer.doc

C프로-3장c03逞풚

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

06장.리스트

Lab 5. 실습문제 (Double linked list)-1_해답.hwp

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

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

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

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

03_queue

<4D F736F F F696E74202D203039C0E520B4EBC8ADBBF3C0DA205BC8A3C8AF20B8F0B5E55D>

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

설계란 무엇인가?

Microsoft PowerPoint - 07-Data Manipulation.pptx

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

PowerPoint Presentation

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

11장 포인터

Microsoft PowerPoint - C++ 5 .pptx

04장 메시지 처리 유형

Programming hwp

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

구조체정의 자료형 (data types) 기본자료형 (primitive data types) : char, int, float 등과같이 C 언어에서제공하는자료형. 사용자정의자료형 (user-defined data types) : 다양한자료형을묶어서목적에따라새로운자료형을

Chap 6: Graphs

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

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

슬라이드 1

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

adfasdfasfdasfasfadf

C++ Programming

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

C++ Programming

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

InsertColumnNonNullableError(#colName) 에해당하는메시지출력 존재하지않는컬럼에값을삽입하려고할경우, InsertColumnExistenceError(#colName) 에해당하는메시지출력 실행결과가 primary key 제약에위배된다면, Ins

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

H3250_Wi-Fi_E.book

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - Java7.pptx

Programming hwp

슬라이드 1

BMP 파일 처리

MFC 프로그래밍

슬라이드 1

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

Visual Basic Visual Basic 소개

5장 MFC기반 다지기

Microsoft PowerPoint 웹 연동 기술.pptx

목차 윈도우드라이버 1. 매뉴얼안내 운영체제 (OS) 환경 윈도우드라이버준비 윈도우드라이버설치 Windows XP/Server 2003 에서설치 Serial 또는 Parallel 포트의경우.

리스트연산, 검색 + 삽입 + 삭제 새로운항목을리스트의처음, 중간, 끝에추가. 기존의항목을리스트의임의의위치에서삭제. 모든항목을삭제. 기존항목을대치 (replace). 리스트가특정항목을가지고있는지를검색 (search). 리스트의특정위치의항목을반환. 리스트안의항목의개수를센

슬라이드 1

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

쉽게 풀어쓴 C 프로그래밍

Frama-C/JESSIS 사용법 소개

K&R2 Reference Manual 번역본

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

02장.배열과 클래스

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

Chap 6: Graphs

Microsoft PowerPoint - chap09-1.ppt

PowerPoint Presentation

13 주차 - MDI, Exception, WebBrowser, RichTextBox, AlarmProgram 대림대학 년도 1 학기홍명덕

<4D F736F F F696E74202D2036C0CFC2B05FB0B4C3BCC1F6C7E2C7C1B7CEB1D7B7A1B9D62E707074>

PowerPoint Presentation

Transcription:

제 7 장컨트롤과리소스 I 7.1 리스트컨트롤실습 7-1 대화상자에리스트컨트롤만들기 7.2 트리컨트롤실습 7-2 대화상자에트리컨트롤만들기

컨트롤및리소스 리스트컨트롤 (List Control) 트리컨트롤 (Tree Control) 탭컨트롤 (Tab Control) 슬라이드컨트롤 (Slider Control) 스핀컨트롤 (Spin Control) 프로그레스바컨트롤 (Progress Bar Control) IP 주소컨트롤 (IP Address Control) 날짜 / 시간컨트롤 (Date Time Picker) 애니메이트컨트롤 (Animate Control)

리스트컨트롤 리스트컨트롤 프로그램내의정보를특정기준에따라분류할수있는컨트롤 리스트컨트롤의일반적인제어 칼럼의추가와삭제 아이템의추가와삭제 아이템설정 아이템정렬 스타일의변경

리스트컨트롤 4 가지형태로자료를출력 REPORT : 컬럼제목이상단에있고, 아이템들이컬럼위치에설정되어있는상태 ICON : 큰아이콘과첫번째컬럼의문자열이설정된상태 SMALLICON : 작은아이콘과첫번째컬럼의문자열이설정된상태 LIST : 리스트상자와같은형태로설정

리스트컨트롤 윈도우탐색기가대표적인예이다. 자세히보기 (REPORT) 큰아이콘보기 (ICON) 작은아이콘보기 (SMALLICON) 간단히보기 (LIST)

리스트컨트롤 LVCOLUMN 칼럼을설정하거나생성하기위해사용하는구조체 LV_COLUMN 으로사용할수도있다 typedef struct _LVCOLUMN { UINT mask; int fmt; int cx; LPTSTR psztext; int cchtextmax; int isubitem; int iorder; int iimage; } LVCOLUMN, FAR *LPLVCOLUMN;

리스트컨트롤 LVCOLUMN 구조체의멤버변수 mask : 각멤버가유효한정보를가지고있는지를명시하는변수 LVCF_FMT : fmt 변수가유효한지 LVCF_SUBITEM : isubitem 변수가유효한지 LVCF_TEXT : psztext 변수가유효한지 LVCF_WIDTH : cx 변수가유효한지 LVCF_IMAGE : iimage 변수가유효한지 (V.4.7) LVCF_ORDER : iorder 변수가유효한지 (V.4.7)

리스트컨트롤 LVCOLUMN 구조체의멤버변수 fmt : 컬럼헤딩과컬럼안의부아이템의정렬 LVCFMT_CENTER, LVCFMT_LEFT, LVCFMT_RIGHT LVCFMT_BITMAP_ON_RIGHT, LVCFMT_IMAGE cx : 컬럼의너비 ( 단위 : Pixel) psztext : 컬럼에세팅되는텍스트 isubitem : 컬럼에연관되는부아이템의색인

리스트컨트롤 LVITEM List view 에서속성을얻거나명시하는구조체 LV_ITEM 으로도사용될수있다 typedef struct _LVITEM { UINT mask; int iitem; int isubitem; UINT state; UINT statemask; LPTSTR psztext; int cchtextmax; int iimage; LPARAM lparam; } LVITEM, FAR *LPLVITEM

리스트컨트롤 LVITEM 의멤버변수 mask : 각멤버가유효한정보를가지고있는지를명시하는변수 iitem : 구조체를참조하는아이템의제로베이스색인 ( 삽입위치 ) isubitem : 구조체를참조하는부아이템의원베이스색인또는구조체를참조하는아이템의제로베이스색인 psztext : 아이템텍스트를명시하는스트링의주소

실습 7-1 대화상자에리스트컨트롤만들기 이번실습은대화상자에 List Control 을만들고데이터의추가, 수정, 그리고삭제를할수있는버튼을만든다. List Control 의스타일을변경할수있는프로그램을작성하 List Control 에표현할데이터는학과, 학번, 이름 대화상자에데이터의추가, 수정, 삭제버튼을생성 List Control 의스타일의변경을위해콤보상자를사용

실습 7-1 대화상자와기본컨트롤의활용 List Control 의생성과데이터추가 / 수정 / 삭제기법 콤보상자를통한컨트롤스타일의변경 그밖의 MFC 프로그래밍기법

실습 7-1 프로그램작성순서 1) 대화상자기반의프로젝트를생성한다. 2) 대화상자에컨트롤을배치하고, 속성을설정한다. 리스트컨트롤, 버튼, 콤보박스, 에디트박스등 3) 각컨트롤을클래스의멤버변수와연결한다. 클래스마법사사용 ( 멤버변수 Tab) 4) 각컨트롤들을초기화한다. OnInitialDialog() 함수에서초기화작업을한다.

실습 7-1 프로그램작성순서 5) 리스트컨트롤에데이터를추가한다. 학과, 학번, 이름을나타내는 Edit Control 의내용을읽어온다 데이터를리스트컨트롤에업데이트한다. 각데이터가입력되지않았으면에러처리한다. 6) 리스트컨트롤의데이터를수정한다. List Control 에서선택된아이템을찾는다. 선택된아이템의데이터를각각학과, 학번, 이름을나타내는 Edit Control 에출력한다. 사용자가키보드를통해각데이터를수정한다. 그리고 [ 수정 ] 버튼을누른다. Edit Control 에서수정된데이터로 List Control 의해당아이템을업데이트한다.

실습 7-1 프로그램작성순서 7) 리스트컨트롤의데이터를삭제한다. List Control 에서선택된아이템을찾는다. List Control 에서아이템을삭제한다. 8) [ 다시쓰기 ] 버튼을구현한다. 입력한데이터를모두초기화한다. 9) 리스트컨트롤의스타일을변경한다. 콤보박스선택이변경될때의메시지핸들러함수를만든다. 10) 프로그램을실행시킨다.

실습 7-1 실행화면

CListCtrl 클래스의주요멤버함수 InsertColumn( ) 함수 List Control 에새로운열을삽입하는함수 SetExtendedStyle( ) 함수 List Control 의스타일을확장시키는함수 InsertItem( ) 함수 List Control 에아이템을추가할때사용되는함수 SetItem( ) 함수 List Control 아이템의속성을설정할때사용하는함수

CListCtrl 클래스의주요멤버함수 GetItemText( ) 함수 List Control 아이템이나서브아이템의텍스트를회수하는함수 DeleteItem( ) 함수 List Control 로부터아이템을삭제할때사용하는함수 SetItemText( ) 함수 List Control 아이템이나서브아이템의텍스트를변경하는함수

트리컨트롤 계층구조를가진데이터나항목을표현하는컨트롤 트리컨트롤의각항목을노드라하며이노드는레이블과비트맵이미지로구성된다. 각노드앞에 + 기호가있으면하위노드가존재한다 노드가확장되면 + 기호는 기호로변경된다.

트리컨트롤 트리컨트롤의예

트리컨트롤 TV_INSERTSTRUCT 구조체 트리뷰컨트롤에새로운아이템을추가하기위해사용되는정보를포함하는구조체 typedef struct tagtvinsertstruct { HTREEITEM hparent; // 상위항목의핸들 HTREEITEM hinsertafter; // 삽입노드의위치 TVITEM item; // 삽입될노드의정보 } TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;

실습 7-2 대화상자에서 Tree Control 를사용하기 대화상자에서 Tree Control 을만들고, 입력한텍스트를트리의노드에추가하고, 노드를추가 / 수정 / 삭제해볼것이다.

실습 7-2 프로그램작성순서 1) 대화상자기반의프로젝트를생성한다. 2) 대화상자에컨트롤을배치하고속성을설정한다. 트리컨트롤, 버튼, 에디트박스등 3) 각컨트롤에멤버변수를연결한다. 4) 트리컨트롤의처리에필요한변수를추가한다. 루트변수와선택된노드를나타내는변수

실습 7-2 프로그램작성순서 5) 각컨트롤들을초기화한다. OnInitDialog() 함수에서초기화작업을한다. 6) 트리컨트롤에아이템을추가한다. 7) 트리컨트롤의아이템이름을수정한다. 8) 트리컨트롤에있는아이템을삭제한다. 9) 프로그램을실행시킨다.

CTreeCtrl 클래스의주요멤버함수 GetItemText( ) 함수 Tree Control 아이템의텍스트를반환하는함수 SetItemText( ) 함수 Tree Control 아이템의텍스트를변경하는함수 InsertItem( ) 함수 Tree Control 에아이템을추가할때사용되는함수 Expand( ) 함수 Tree Control 자식노드의리스트를확장할때사용하는함수 DeleteItem( ) 함수 Tree Control 로부터아이템을삭제할때사용하는함수

실습 7-2 실행결과

연습문제 7-1 학생정보를처리하는프로젝트

BOOL CExercise7_1Dlg::OnInitDialog() m_bid = TRUE; TV_INSERTSTRUCT tvstruct; tvstruct.hparent = 0; tvstruct.hinsertafter = TVI_LAST; tvstruct.item.mask = TVIF_TEXT; tvstruct.item.psztext = _T(" 가상대학교 "); m_hroot = m_treedept.insertitem(&tvstruct); tvstruct.hparent = m_hroot; tvstruct.hinsertafter = TVI_LAST; tvstruct.item.mask = TVIF_TEXT; tvstruct.item.psztext = (LPTSTR)(LPCSTR)_T(" 국어국문학과 "); m_hkorean = m_treedept.insertitem(&tvstruct);

BOOL CExercise7_1Dlg::OnInitDialog() tvstruct.item.psztext = (LPTSTR)(LPCSTR)_T(" 컴퓨터공학과 "); m_hcomputer = m_treedept.insertitem(&tvstruct); tvstruct.item.psztext = (LPTSTR)(LPCSTR)_T(" 물리학과 "); m_hphysics = m_treedept.insertitem(&tvstruct); m_treedept.expand(m_hroot, TVE_EXPAND); m_ncount=0; LV_COLUMN lvcolumn; LPWSTR list[5] = {_T(" 학번 "), _T(" 이름 "), _T(" 학년 "), _T(" 성별 "), _T(" 주소 ")}; int nwidth[5] = {54, 54, 54, 53, 150};

BOOL CExercise7_1Dlg::OnInitDialog() { for(int i=0; i<5; i++) lvcolumn.mask = LVCF_FMT LVCF_SUBITEM LVCF_TEXT LVCF_WIDTH; lvcolumn.fmt = LVCFMT_LEFT; lvcolumn.psztext = list[i]; lvcolumn.isubitem = i; lvcolumn.cx = nwidth[i]; m_liststudent.insertcolumn(i, &lvcolumn); } m_liststudent.setextendedstyle(m_liststudent.getextendedstyle() LVS_EX_FULLROWSELECT); ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(FALSE); return TRUE; // TRUE }

void CExercise7_1Dlg::OnSelchangedTreeDept(NMHDR *pnmhdr, LRESULT *presult) ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(FALSE); m_hselectednode = pnmtreeview->itemnew.hitem; { if(m_hselectednode == m_hkorean) m_studentinfo[m_ncount].strdept.format(_t(" 국어국문학과 ")); ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(TRUE); } { else if(m_hselectednode == m_hcomputer) m_studentinfo[m_ncount].strdept.format(_t(" 컴퓨터공학과 ")); ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(TRUE); } { else if(m_hselectednode == m_hphysics) m_studentinfo[m_ncount].strdept.format(_t(" 물리학과 ")); ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(TRUE); }

void CExercise7_1Dlg::OnSelchangedTreeDept(NMHDR *pnmhdr, LRESULT *presult) { else m_studentinfo[m_ncount].strdept.format(_t(" 가상대학교 ")); ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(FALSE); } LV_ITEM lvitem; CString strgrade, strsex; m_liststudent.deleteallitems(); { for(int i=0; i<m_ncount; i++) int ncount = m_liststudent.getitemcount();

void CExercise7_1Dlg::OnSelchangedTreeDept(NMHDR *pnmhdr, LRESULT *presult) { if(m_treedept.getitemtext(m_hselectednode) == m_studentinfo[i].strdept m_hselectednode==m_hroot) if(m_studentinfo[i].ngrade == 0) { strgrade.format(_t("1 학년 ")); } else if(m_studentinfo[i].ngrade == 1) { strgrade.format(_t("2 학년 ")); } else if(m_studentinfo[i].ngrade == 2) { strgrade.format(_t("3 학년 ")); } else if(m_studentinfo[i].ngrade == 3) { strgrade.format(_t("4 학년 ")); } if(m_studentinfo[i].nsex == 0) { strsex.format(_t(" 남자 ")); } else if(m_studentinfo[i].nsex == 1) { strsex.format(_t(" 여자 ")); }

void CExercise7_1Dlg::OnSelchangedTreeDept(NMHDR *pnmhdr, LRESULT *presult) lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 0; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strID; m_liststudent.insertitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 1; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strName; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 2; lvitem.psztext = (LPWSTR)(LPCWSTR)strGrade; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 3; lvitem.psztext = (LPWSTR)(LPCWSTR)strSex; m_liststudent.setitem(&lvitem);

void CExercise7_1Dlg::OnSelchangedTreeDept(NMHDR *pnmhdr, LRESULT *presult) lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 4; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strA ddress; m_liststudent.setitem(&lvitem); } }*presult = 0;

void CExercise7_1Dlg::OnClickedButtonInsert() LV_ITEM lvitem; int ncount = m_liststudent.getitemcount(); CInfoDlg *pinfo = new CInfoDlg; CString strgrade, strsex; { if(pinfo->domodal() == IDOK) if(!pinfo->m_strid.isempty() &&!pinfo->m_strname.isempty() &&!(pinfo->m_ngrade < 0) &&!(pinfo->m_nsex < 0) &&!pinfo->m_straddress.isempty()) { { { } { for(int i = 0; i < m_ncount; i++) if(m_studentinfo[i].strid == pinfo->m_strid) m_bid = FALSE; break; else m_bid = TRUE; } }

void CExercise7_1Dlg::OnClickedButtonInsert() { if(m_bid) m_studentinfo[m_ncount].strdept = m_treedept.getitemtext(m_hselectednode); m_studentinfo[m_ncount].strid = pinfo->m_strid; m_studentinfo[m_ncount].strname = pinfo->m_strname; m_studentinfo[m_ncount].ngrade = pinfo->m_ngrade; m_studentinfo[m_ncount].nsex = pinfo->m_nsex; m_studentinfo[m_ncount].straddress = pinfo->m_straddress; if(m_studentinfo[m_ncount].ngrade == 0) { strgrade.format(_t("1 학년 ")); } else if(m_studentinfo[m_ncount].ngrade == 1) { strgrade.format(_t("2 학년 ")); } else if(m_studentinfo[m_ncount].ngrade == 2) { strgrade.format(_t("3 학년 ")); } else if(m_studentinfo[m_ncount].ngrade == 3) { strgrade.format(_t("4 학년 ")); }

void CExercise7_1Dlg::OnClickedButtonInsert() if(m_studentinfo[m_ncount].nsex == 0) { strsex.format(_t(" 남자 ")); } else if(m_studentinfo[m_ncount].nsex == 1) { strsex.format(_t(" 여자 ")); } { if(m_treedept.getitemtext(m_hselectednode) == m_studentinfo[m_ncount].strdept) lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 0; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[m_nCount].strID; m_liststudent.insertitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 1; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[m_nCount].strName; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 2; lvitem.psztext = (LPWSTR)(LPCWSTR)strGrade; m_liststudent.setitem(&lvitem);

void CExercise7_1Dlg::OnClickedButtonInsert() lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 3; lvitem.psztext = (LPWSTR)(LPCWSTR)strSex; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 4; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[m_nCount].strAddress; m_liststudent.setitem(&lvitem); } } { } } { m_ncount++; else MessageBox(_T(" 이미존재하는학번입니다."), _T(" 잠깐 "), MB_OK); else MessageBox(_T(" 모든항목을입력해주세요."), _T(" 잠깐 "), MB_OK); } } } ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(FALSE);

void CExercise7_1Dlg::OnClickedButtonModify() LV_ITEM lvitem; CString strgrade, strsex; CInfoDlg *pinfo = new CInfoDlg; int Num; { { for(int j = 0; j<m_ncount; j++) if(m_liststudent.getitemtext(m_nselecteditem, 0) == m_studentinfo[j].strid) pinfo->m_strid = m_studentinfo[j].strid; pinfo->m_strname = m_studentinfo[j].strname; pinfo->m_ngrade = m_studentinfo[j].ngrade; pinfo->m_nsex = m_studentinfo[j].nsex; pinfo->m_straddress = m_studentinfo[j].straddress; Num = j; } } { { { } if(pinfo->domodal() == IDOK) for(int i = 0; i < m_ncount; i++) if(m_studentinfo[i].strid == pinfo->m_strid && i!= Num) m_bid = FALSE; break;

void CExercise7_1Dlg::OnClickedButtonModify() { else m_bid = TRUE; } } { if(m_bid) m_studentinfo[num].strid = pinfo->m_strid; m_studentinfo[num].strname = pinfo->m_strname; m_studentinfo[num].ngrade = pinfo->m_ngrade; m_studentinfo[num].nsex = pinfo->m_nsex; m_studentinfo[num].straddress = pinfo->m_straddress; m_liststudent.deleteallitems(); { for(int i=0; i<m_ncount; i++) int ncount = m_liststudent.getitemcount(); if(m_studentinfo[i].ngrade == 0) { strgrade.format(_t("1 학년 ")); } else if(m_studentinfo[i].ngrade == 1) { strgrade.format(_t("2 학년 ")); } else if(m_studentinfo[i].ngrade == 2) { strgrade.format(_t("3 학년 ")); } else if(m_studentinfo[i].ngrade == 3) {

void CExercise7_1Dlg::OnClickedButtonModify() strgrade.format(_t("4 학년 ")); } if(m_studentinfo[i].nsex == 0) { strsex.format(_t(" 남자 ")); } else if(m_studentinfo[i].nsex == 1) { strsex.format(_t(" 여자 ")); } { if(m_treedept.getitemtext(m_hselectednode) == m_studentinfo[i].strdept) lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 0; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strID; m_liststudent.insertitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 1; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strName; m_liststudent.setitem(&lvitem);

void CExercise7_1Dlg::OnClickedButtonModify() lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 2; lvitem.psztext = (LPWSTR)(LPCWSTR)strGrade; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 3; lvitem.psztext = (LPWSTR)(LPCWSTR)strSex; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 4; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strAddress; m_liststudent.setitem(&lvitem); } } } { } } { } else MessageBox(_T(" 이미존재하는학번입니다."), _T(" 잠깐 "), MB_OK); else MessageBox(_T(" 모든항목을입력해주세요 "),_T(" 잠깐 "),MB_OK); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(FALSE);}

void CExercise7_1Dlg::OnClickedButtonDelete() int Num; LV_ITEM lvitem; CString strgrade, strsex; { { { if(messagebox(_t(" 정말로삭제하시겠습니까?"), _T(" 삭제경고 "), MB_YESNO) == IDYES) for(int j=0; j<m_ncount; j++) if(m_liststudent.getitemtext(m_nselecteditem, 0) == m_studentinfo[j].strid) Num=j; } } { } for(int k=num; k<m_ncount; k++) m_studentinfo[k] = m_studentinfo[k+1]; m_ncount--; m_liststudent.deleteallitems(); { for(int i=0; i<m_ncount; i++) int ncount = m_liststudent.getitemcount(); if(m_treedept.getitemtext(m_hselectednode) == m_studentinfo[i].strdept)

void CExercise7_1Dlg::OnClickedButtonDelete() { if(m_studentinfo[i].ngrade == 0) { strgrade.format(_t("1 학년 ")); } else if(m_studentinfo[i].ngrade == 1) { strgrade.format(_t("2 학년 ")); } else if(m_studentinfo[i].ngrade == 2) { strgrade.format(_t("3 학년 ")); } else if(m_studentinfo[i].ngrade == 3) { strgrade.format(_t("4 학년 ")); } if(m_studentinfo[i].nsex == 0) { strsex.format(_t(" 남자 ")); } else if(m_studentinfo[i].nsex == 1) { strsex.format(_t(" 여자 ")); } lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 0;

void CExercise7_1Dlg::OnClickedButtonDelete() lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strID; m_liststudent.insertitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 1; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strName; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 2; lvitem.psztext = (LPWSTR)(LPCWSTR)strGrade; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 3; lvitem.psztext = (LPWSTR)(LPCWSTR)strSex; m_liststudent.setitem(&lvitem); lvitem.mask = LVIF_TEXT; lvitem.iitem = ncount; lvitem.isubitem = 4; lvitem.psztext = (LPWSTR)(LPCWSTR)m_studentInfo[i].strAddress; m_liststudent.setitem(&lvitem); } } ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(FALSE); }}

void CExercise7_1Dlg::OnItemchangedListStudent(NMHDR *pnmhdr, LRESULT *presult) LPNMLISTVIEW pnmlv = reinterpret_cast<lpnmlistview>(pnmhdr); // TODO: 여기에컨트롤알림처리기코드를추가합니다. m_nselecteditem = pnmlv->iitem; ((CButton*) GetDlgItem(IDC_BUTTON_INSERT))->EnableWindow(FALSE); { if(m_hselectednode == m_hkorean) m_studentinfo[m_ncount].strdept.format(_t(" 국어국문학과 ")); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(TRUE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(TRUE); } { else if(m_hselectednode == m_hcomputer) m_studentinfo[m_ncount].strdept.format(_t(" 컴퓨터공학과 ")); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(TRUE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(TRUE); }

void CExercise7_1Dlg::OnItemchangedListStudent(NMHDR *pnmhdr, LRESULT *presult) { else if(m_hselectednode == m_hphysics) m_studentinfo[m_ncount].strdept.format(_t(" 물리학과 ")); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(TRUE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(TRUE); } { else m_studentinfo[m_ncount].strdept.format(_t(" 가상대학교 ")); ((CButton*) GetDlgItem(IDC_BUTTON_MODIFY))->EnableWindow(FALSE); ((CButton*) GetDlgItem(IDC_BUTTON_DELETE))->EnableWindow(FALSE); }*presult = 0; }

연습문제 7-1 실행결과