1. 클릭된 인덱스 알아내기
리스트 컨트롤 자체의 멤버변수인 .GetSelectionMark(); 을 사용한다.
int clickindex = m_list.GetSelectionMark();
아무것도 안눌렸을 때는 -1 반환
리스트 컨트롤 오른쪽 클릭 후 이벤트 처리 함수 추가
클래스 목록을 주의해서 확인하고 NM_CLICK을 선택한다.
생성된 함수안에 아래와 같이 입력한다.
/*
void CbookManagerDlg::OnNMClickList1(NMHDR* pNMHDR, LRESULT* pResult)
{
LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
NM_LISTVIEW* pNMView = (NM_LISTVIEW*)pNMHDR;
clicked_index = pNMView->iItem;
*pResult = 0;
}
*/
clicked_index 는 함수 종료 후에도 값이 유지되어야 하므로 멤버변수로 만들었고 아무것도 클릭되지 않은 상태를 구분하기 위해 다이얼로그 생성자에서 -1로 초기화 해주었다.
2. 알아낸 인덱스로 값 가져오기
m_list.GetItemText(clickindex, 0);
위와 같이 리스트 컨트롤 변수의 .GetItemText() 함수를 사용하여 알아낼 수 있다. 첫번째 매개변수는 nItem 행, 두번째 매개변수는 nSubItem 열 이다. 첫번째 매개변수로 위에서 알아낸 인덱스를 입력한다.
리스트 컨트롤에서 선택된 행을 삭제 후 갱신하는 예시코드
void CbookManagerDlg::OnBnClickedButtondelete()
{
UpdateData(true);
int clickindex = m_list.GetSelectionMark();
CMysqlController conn;
CString temp;
temp = _T("delete from TB_Book where id=");
CString idNum = m_list.GetItemText(clickindex, 0);
temp += idNum;
if (conn.InsertQuery(LPSTR(LPCTSTR(temp))) == true)
{
AfxMessageBox(_T("성공"));
RenewListControl();
}
else
{
AfxMessageBox(_T(" 실패"));
}
UpdateData(false);
}
'프로그래밍 > MFC (C++)' 카테고리의 다른 글
MFC ] 시리얼 통신으로 LED 제어하기 (2) (0) | 2022.07.13 |
---|---|
MFC ] DoModal() 창 닫기, 강제 종료 (0) | 2022.07.13 |
MFC ] Visual Studio에서 MySQL 라이브러리 추가하기 (0) | 2022.07.13 |
MFC ] 시리얼 통신으로 LED 제어하기 (1) (0) | 2022.07.09 |
MFC ] 통계자료, 스레드 Thread 를 사용하여 로드하기 (0) | 2022.07.09 |