이것보다 더 좋은 ListCtrl 사용법은 없을 듯 싶네요!!
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 |