[MFC] List Control 컬럼 클릭 시 오름차순 내림차순 번갈아 가면서 정렬

헤더 파일에
typedef struct SORTPARAM
{
	int columnIdx;
	bool sortDirect;
	CListCtrl *pList;
}SORTPARAM;
구조체와
bool m_bSortDirect;
bool 변수 추가 후



List Control의 HDN_ITEMCLICK 핸들러 추가
void CDocumentCheckUpReportDlg::OnHdnItemclickList(NMHDR *pNMHDR, LRESULT *pResult)
{
	LPNMHEADER phdr = reinterpret_cast<LPNMHEADER>(pNMHDR);
	*pResult = 0;

	SORTPARAM sParam;

	sParam.pList = (CListCtrl *)GetDlgItem(IDC_LIST);
	sParam.columnIdx = phdr->iItem;
	sParam.sortDirect = m_bSortDirect;

	sParam.pList->SortItemsEx( CompareFunc, (LPARAM)&sParam );

	m_bSortDirect = !m_bSortDirect;

	return;
}

SortItemsEx 함수 호출 시 호출되는 CallBack 함수 CompareFunc 추가
int CALLBACK CDocumentCheckUpReportDlg::CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParamSort)
{
	CListCtrl *pListCtrl = ((SORTPARAM *)lParamSort)->pList;
	int columnIdx = ((SORTPARAM *)lParamSort)->columnIdx;
	bool sortDirect = ((SORTPARAM *)lParamSort)->sortDirect;

	CString strItem1 = pListCtrl->GetItemText(static_cast<int>(lParam1), columnIdx);
	CString strItem2 = pListCtrl->GetItemText(static_cast<int>(lParam2), columnIdx);

	return sortDirect ? _tcscmp((TCHAR *)(LPCTSTR)strItem1, (TCHAR *)(LPCTSTR)strItem2) : -_tcscmp((TCHAR *)(LPCTSTR)strItem1, (TCHAR *)(LPCTSTR)strItem2);
}

댓글

이 블로그의 인기 게시물

[NSIS] 32비트와 64비트 모듈 등록하는 법. (regsvr32)

[Visual Studio] Windows 7 에서 Visual Studio 6.0 디버그 시 프로세스 좀비되는 증상 해결 방법