mfc_ListCtrl - 8BitsCoding/RobotMentor GitHub Wiki
위 그림과 같은 리스트 컨트롤을 만드려고 한다.
1. 속성 설정
2. 리스트 컨트롤의 헤더 컨트롤 추가
// OnInitDialog
LV_COLUMN add_column;
add_column.mask = LVCF_TEXT | LVCF_WIDTH; // LV_COLUMN 구조체에서 어떠한 정보만 쓰겠다고 명시
add_column.pszText = L"이름";
add_column.cx = 80; // 폭
m_data_list.InsertColumn(0, &add_column);
add_column.pszText = L"전화번호";
add_column.cx = 100; // 폭
m_data_list.InsertColumn(1, &add_column);
add_column.mask = LVCF_TEXT | LVCF_WIDTH | LVCF_FMT; // 정렬기능을 추가해보자.
add_column.fmt = LVCFMT_CENTER;
add_column.pszText = L"주소";
add_column.cx = 200; // 폭
m_data_list.InsertColumn(2, &add_column);
m_data_list.SetExtendedStyle(LVS_EX_FULLROWSELECT); // 전체 ROW를 선택할 수 있도록 옵션변경
3. 리스트 컨트롤의 아이템 추가
void CTHListCtrlDlg::OnBnClickedAddBtn()
{
// 3. 리스트 컨트롤에 아이템 추가
CString str;
GetDlgItemText(IDC_NAME_EDIT, str);
int index = m_data_list.GetItemCount();
LV_ITEM add_item;
add_item.iItem = index; // 0번째 아이템
add_item.mask = LVIF_TEXT; // Text 항목만 쓰겠다.
add_item.pszText = (wchar_t *)(const wchar_t *)str;
add_item.iSubItem = 0; // 0번째 Column
m_data_list.InsertItem(&add_item);
GetDlgItemText(IDC_PHONE_EDIT, str);
add_item.pszText = (wchar_t *)(const wchar_t *)str;
add_item.iSubItem = 1; // 1번째 Column
m_data_list.SetItem(&add_item);
GetDlgItemText(IDC_ADD_EDIT, str);
//add_item.pszText = (wchar_t *)(const wchar_t *)str;
//add_item.iSubItem = 2; // 1번째 Column
m_data_list.SetItemText(index, 2, str); // 이런 방식도 가능
}
4. 리스트 컨트롤 움직일때 처리
void CTHListCtrlDlg::OnLvnItemchangedDataList(NMHDR *pNMHDR, LRESULT *pResult)
{
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
// 4. 리스트 컨트롤을 움직일때
if (pNMLV->uNewState & LVIS_SELECTED)
{
// 새로운 항목을 선택
SetDlgItemText(IDC_NAME_EDIT, m_data_list.GetItemText(pNMLV->iItem, 0));
SetDlgItemText(IDC_PHONE_EDIT, m_data_list.GetItemText(pNMLV->iItem, 1));
SetDlgItemText(IDC_ADD_EDIT, m_data_list.GetItemText(pNMLV->iItem, 2));
}
*pResult = 0;
}
5. 선택된 리스트 컨트롤 데이터 변경
void CTHListCtrlDlg::OnBnClickedModifyBtn()
{
// 5. 선택된 리스트 컨트롤 데이터 변경
POSITION pos = m_data_list.GetFirstSelectedItemPosition();
if (pos == NULL) // 어떠한 항목도 선택안함
{
}
else {
int index;
while (pos != NULL) {
index = m_data_list.GetNextSelectedItem(pos);
}
CString str;
GetDlgItemText(IDC_NAME_EDIT, str);
m_data_list.SetItemText(index, 0, str);
GetDlgItemText(IDC_PHONE_EDIT, str);
m_data_list.SetItemText(index, 1, str);
GetDlgItemText(IDC_ADD_EDIT, str);
m_data_list.SetItemText(index, 2, str);
}
}