Upload
others
View
2
Download
0
Embed Size (px)
Citation preview
제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 : 아이템 텍스트를 명시하는 스트링의 주소
리스트 컨트롤
• 이번 실습은 대화상자에 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 프로그램 작성 순서
실행 화면
실습 7-1
• InsertColumn( )함수
• List Control에 새로운 열을 삽입하는 함수
• SetExtendedStyle( ) 함수
• List Control의 스타일을 확장시키는 함수
• InsertItem( )함수
• List Control에 아이템을 추가 할 때 사용되는 함수
• SetItem( ) 함수
• List Control 아이템의 속성을 설정 할 때 사용하는 함수
CListCtrl 클래스의 주요 멤버 함수
• GetItemText( )함수
• List Control 아이템이나 서브 아이템의 텍스트를 회수하는 함수
• DeleteItem( ) 함수
• List Control로부터 아이템을 삭제할 때 사용하는 함수
• SetItemText( )함수
• List Control 아이템이나 서브 아이템의 텍스트를 변경하는 함수
CListCtrl 클래스의 주요 멤버 함수
• 계층 구조를 가진 데이터나 항목을 표현하는 컨트롤
• 트리 컨트롤의 각 항목을 노드라 하며 이 노드는 레이블과 비트맵 이미지로 구성된다.
• 각 노드 앞에 + 기호가 있으면 하위 노드가 존재한다
• 노드가 확장되면 + 기호는 – 기호로 변경된다.
트리 컨트롤
트리 컨트롤의 예
트리 컨트롤
TV_INSERTSTRUCT 구조체
• 트리 뷰 컨트롤에 새로운 아이템을 추가하기 위해 사용되는 정보를 포함하는 구조체
typedef struct tagTVINSERTSTRUCT {
HTREEITEM hParent; //상위 항목의 핸들
HTREEITEM hInsertAfter; //삽입 노드의 위치
TVITEM item; //삽입될 노드의 정보
} TVINSERTSTRUCT, FAR *LPTVINSERTSTRUCT;
트리 컨트롤
실습 7-2대화상자에서 Tree Control를 사용하기
• 대화상자에서 Tree Control을 만들고, 입력한 텍스트를 트리의 노드에 추가하고, 노드를 추가/수정/삭제 해 볼 것이다.
1) 대화상자 기반의 프로젝트를 생성한다.
2)대화상자에 컨트롤을 배치하고 속성을 설정한다.
• 트리 컨트롤, 버튼, 에디트 박스 등
3)각 컨트롤에 멤버 변수를 연결한다.
4)트리 컨트롤의 처리에 필요한 변수를 추가한다.
• 루트 변수와 선택된 노드를 나타내는 변수
실습 7-2프로그램 작성 순서
5)각 컨트롤들을 초기화한다.
• OnInitDialog() 함수에서 초기화 작업을 한다.
6)트리 컨트롤에 아이템을 추가한다.
7)트리 컨트롤의 아이템 이름을 수정한다.
8)트리 컨트롤에 있는 아이템을 삭제한다.
9)프로그램을 실행시킨다.
실습 7-2프로그램 작성 순서
• GetItemText( )함수
• Tree Control 아이템의 텍스트를 반환하는 함수
• SetItemText( ) 함수
• Tree Control 아이템의 텍스트를 변경하는 함수
• InsertItem( )함수
• Tree Control에 아이템을 추가 할 때 사용되는 함수
• Expand( ) 함수
• Tree Control 자식 노드의 리스트를 확장할 때 사용하는 함수
• DeleteItem( ) 함수
• Tree Control로부터 아이템을 삭제할 때 사용하는 함수
CTreeCtrl 클래스의 주요 멤버 함수
실행결과
실습 7-2
연습 문제 7-1 • 학생 정보를 처리하는 프로젝트
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 }
BOOL CExercise7_1Dlg::OnInitDialog()
((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].strAddress;
m_listStudent.SetItem(&lvItem);
}
}*pResult = 0;
void CExercise7_1Dlg::OnSelchangedTreeDept(NMHDR *pNMHDR, LRESULT *pResult)
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::OnClickedButtonInsert()
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::OnClickedButtonModify()
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::OnClickedButtonDelete()
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; }
void CExercise7_1Dlg::OnItemchangedListStudent(NMHDR *pNMHDR, LRESULT *pResult)
연습 문제 7-1
실행결과