보통 편집은 포커스가 있는 아이템이 사용자가 클릭함으로써 시작됩니다.
사용자가 버튼을 클릭했을때 편집을 시작해야 한다고 가정해 봅시다.
아래는 편집을시작하게하는 코드입니다.
m_listctrl.SetFocus();
m_listctrl.EditLabel(nItem);
만약 리스트뷰가 포커스를 가지고 있지 않는 경우를 위해 SetFocus() 함수를 꼭 기억해야 합니다.
물론 이것이 실행되려면 리스트뷰 컨트롤은 LVM_EDITLABEL 스타일을 가지고 있어야 합니다.
2. 두번째방법
리스트 컨트롤에서 LVS_ENDITLABELS 스타일을 설정하고 리스트 컨트롤 아이템을 살짝 눌러주면 해당 아이템이 수정할 수 있는 형태로 바뀐다. 이렇게 바뀌었을때 현재 데이터를 수정하면 수정이 가능하다
수정하였다고 바로 변경되는 것은 아니다.
리스트컨트롤의 데이터가 수정되는 것이 아니라 수정했을 때 수정된 데이터를 그대로 다시 시스트컨트롤에 설정해 주어야 한다.
그러기 위해서는 수정된 순간을 얻어야 한다.
이 메시지는 LVN_ENDLABELEDIT 통지 메시지를 이용하여 함수를 만들 수있다
-> ClassWizard에서 리스트컨트롤 선택하고 LVN_ENDLABELEDIT 항목을 선택한다.
항수명 : void CExListCtrlDlg::OnEndlabeleditListctrl(...)
{
LV_DISPINFO* pDispInfo = (LV_DISPINFO*)pNMHDR;
//수정된 데이터를 리스트 컨트롤에 설정한다.
m_listCtrl.SetItemText(pDispInfo->Item,.iltem, 0, pDispInfo->item.pszText);
*pResult=0;
}
이 함수는 아이템 데이터의 수정이 끝났을때 수행되는 함수. 현재 수정된 데이터가 리스트 상자에 설정된다.
LVN_ENDLABELEDIT에 의해 만들어진 함수에는 pDispInfo로 LV_DISPINFO 구조체로 이벤트 데이터를 받는다
LV_DISPINFO는 리스트 컨트롤에서 현재 출력되는 정보를 얻는다
수정 상태에서 수정된 데이터가 실제로 리스트 상자에 삽입된 것이 아니라 화면에 수정된 형태로만 보여주는 것이다.
이때 수정이 끝나면 화면에 출력되는 문자열을 pDispInfo->item.pszText로 얻을수 있다
이문자열을 현재 설정된 수정하고 있는 아이템 번소에 SetItemText함수를 이용하여 설정하면 수정이 되는 것이다.
SetItemText 함수의 첫번째 인자는 아이템 번호이며, 두번째 인자는 컬럼 번호, 세번째 인자는 수정할 텍스트 문자열이다.
이 함수를 이용하면 현재 수정된 데이터로 리스트 상자에 새로운 데이터가 업데이트 된다.
리스트 컨트롤에서 특정 항목을 삭제하고자 할때는 DeleteItem함수를 사용하면 된다.
'MFC 인터페이스' 카테고리의 다른 글
리스트 컨트롤 내용 파일로 쓰기 (0) | 2013.10.20 |
---|---|
버튼 컨트롤 업 이벤트 처리 (0) | 2013.10.20 |
폴더 열기 (0) | 2013.10.20 |
폴더내 파일 이름 , 개수 , 용량 구하기 (0) | 2013.10.20 |
스크린샷 찍기 (0) | 2013.10.20 |