이것보다 더 좋은 ListCtrl 사용법은 없을 듯 싶네요!!

1. 리스트컨트롤 추가 

2. 멤버변수 추가 
m_list 

3. 체크박스 레이아웃 
m_list.SetExtendedStyle(LVS_EX_FULLROWSELECT | LVS_EX_CHECKBOXES | LVS_EX_GRIDLINES ); 

4. 초기화 
m_list.DeleteAllItems(); 

5. 칼럼명 설정 
m_list.InsertColumn(0, _T("번호"), LVCFMT_LEFT, 100, -1); 
m_list.InsertColumn(1, _T("제목"), LVCFMT_LEFT, 100, -1); 
m_list.InsertColumn(2, _T("작성자"), LVCFMT_LEFT, 100, -1); 
m_list.InsertColumn(3, _T("코멘트"), LVCFMT_LEFT, 100, -1); 
m_list.InsertColumn(4, _T("파일"), LVCFMT_LEFT, 100, -1); 
//칼럼 추가 인덱스, 칼람명, 정렬방향, 칼럼길이, 서브아이템 갯수 

6. 데이터 추가 
int seq = 0; 
CString seq_string; 
seq_string.Format(_T("%d"),seq); 
CString title=_T("test"); 
CString writer=_T("이대한"); 
CString comment=_T("없음"); 
CString file=_T("파일경로"); 

m_list.InsertItem(seq,seq_string); 
m_list.SetItem(seq,1,LVIF_TEXT,title,0,0,0,NULL); 
m_list.SetItem(seq,2,LVIF_TEXT,writer,0,0,0,NULL); 
m_list.SetItem(seq,3,LVIF_TEXT,comment,0,0,0,NULL); 
m_list.SetItem(seq,4,LVIF_TEXT,file,0,0,0,NULL); 

seq = 1; 
seq_string.Format(_T("%d"),seq); 
title=_T("test2"); 
writer=_T("이대한2"); 
comment=_T("있음"); 
file=_T("파일경로"); 

m_list.InsertItem(seq,seq_string); 
m_list.SetItem(seq,1,LVIF_TEXT,title,0,0,0,NULL); 
m_list.SetItem(seq,2,LVIF_TEXT,writer,0,0,0,NULL); 
m_list.SetItem(seq,3,LVIF_TEXT,comment,0,0,0,NULL); 
m_list.SetItem(seq,4,LVIF_TEXT,file,0,0,0,NULL); 


7. 아이템 선택(1개 이상 선택 및 확인) 
POSITION pos = m_list.GetFirstSelectedItemPosition(); 

if (pos == NULL) 
AfxMessageBox(_T("No items were selected!\n")); 
else 
{ 
while (pos) 
{ 
int nItem = m_list.GetNextSelectedItem(pos); 
CString temp = m_list.GetItemText(nItem,0); 
temp.Format(_T("%s seq가 선택됨"),temp); 
AfxMessageBox(temp); 


// you could do your own processing on nItem here 
} 
} 


8. 체크박스 전체 체크 
int nCount=m_list.GetItemCount(); 
for(int i = 0; i< nCount;i++) 
m_list.SetCheck(i); 

9. 체크박스 전체 해제 
//헤더파일에 
#ifdef ListView_SetCheckState 
#define ListView_SetCheckState(hwndLV,i,fCheck) \ 
ListView_SetItemState(hwndLV,i, \ 
INDEXTOSTATEIMAGEMASK((fCheck)+1),LVIS_STATEIMAGEMASK) 
#endif 

//소스파일에 
CListCtrl* tmp; 
tmp=&m_list; 
int nCount=m_list.GetItemCount(); 
for(int i = 0; i< nCount;i++) 
ListView_SetCheckState(tmp->GetSafeHwnd(),i,FALSE); 

10. 체크 확인(1개 이상) 
int nCount=m_list.GetItemCount(); 
for(int i =0 ; i
{ 
BOOL a = m_list.GetCheck(i); 
if(a==TRUE) 
{ 
CString temp = m_list.GetItemText(i,0); 
temp.Format(_T("%s seq가 선택됨"),temp); 
AfxMessageBox(temp); 
} 
} 



11. 데이터 삽입 
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. 
int seq = 0; 
CString seq_string; 
seq_string.Format(_T("%d"),seq); 
CString title=_T("test"); 
CString writer=_T("이대한"); 
CString comment=_T("없음"); 
CString file=_T("파일경로"); 

m_list.InsertItem(seq,seq_string); 
m_list.SetItem(seq,1,LVIF_TEXT,title,0,0,0,NULL); 
m_list.SetItem(seq,2,LVIF_TEXT,writer,0,0,0,NULL); 
m_list.SetItem(seq,3,LVIF_TEXT,comment,0,0,0,NULL); 
m_list.SetItem(seq,4,LVIF_TEXT,file,0,0,0,NULL); 


12. 데이터 삭제 
POSITION pos = m_list.GetFirstSelectedItemPosition(); 

if (pos == NULL) 
AfxMessageBox(_T("No items were selected!\n")); 
else 
{ 
while (pos) 
{ 
int nItem = m_list.GetNextSelectedItem(pos); 
CString temp = m_list.GetItemText(nItem,0); 
temp.Format(_T("%s seq가 삭제됨"),temp); 
AfxMessageBox(temp); 
m_list.DeleteItem(nItem); 
// you could do your own processing on nItem here 
} 
} 

'NativeCode > mfc' 카테고리의 다른 글

MySQL C++, MFC에서 사용하기  (0) 2010.06.17
CDC 글 쓰기  (0) 2010.03.18
Font 바꾸기  (0) 2010.03.18
CFile  (0) 2010.03.18
Modal Vs Modless  (0) 2010.03.18

+ Recent posts