[MFC] List Control 컬럼 클릭 시 오름차순 내림차순 번갈아 가면서 정렬
헤더 파일에
List Control의 HDN_ITEMCLICK 핸들러 추가
SortItemsEx 함수 호출 시 호출되는 CallBack 함수 CompareFunc 추가
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);
}
댓글
댓글 쓰기