제 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 실행결과