칼럼을 클릭했을 때, 오름차순 or 내림차순으로 List Control의 항목들을 정렬시키고 싶을 때에 이 코드를 추가하면 된다.
// 멤버 변수 추가.
int m_nSortColumn;
BOOL m_bAscending;
// OnLvnColumnclickListVariable 이벤트 메시지 처리기에 추가.
LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);
int column = pNMLV->iSubItem;
if (column == m_nSortedColumn)
{
m_bAscending = !m_bAscending;
}
else
{
m_bAscending = TRUE;
}
m_nSortedColumn = column;
int cnt = m_ListControl.GetItemCount();
CString* str = new CString[cnt];
for (int i = 0; i < cnt; ++i)
{
str[i] = m_ListControl.GetItemText(i, column);
m_ListControl.SetItemData(i, (DWORD)(LPCTSTR)str[i]);
}
m_ListControl.SortItems(CompareFunc, (LPARAM)m_bAscending);
delete[]str;
*pResult = 0;
// cpp에 전역 변수로 Compare함수 추가.
static int CALLBACK CompareFunc(LPARAM lParam1, LPARAM lParam2, LPARAM lParam)
{
BOOL Ascending = (BOOL)lParam;
LPCTSTR s1 = (LPCTSTR)(DWORD)lParam1;
LPCTSTR s2 = (LPCTSTR)(DWORD)lParam2;
if (Ascending)
return _tcscmp(s1, s2);
else
return -(_tcscmp(s1, s2));
return 0;
}
'GUI Toolkit > MFC' 카테고리의 다른 글
MFC - 다이얼로그(Dialog) 캡쳐하여 인쇄하기 (0) | 2017.09.11 |
---|---|
MFC - 다이얼로그(Dialog) Item들의 글자 크기 변경 (0) | 2017.09.11 |
MFC - 리스트 컨트롤(List Control)에서 여러 개의 아이템을 동시에 삭제하기 (0) | 2017.09.07 |
MFC - CString 사용 방법 (0) | 2017.08.31 |
MFC - DialogBox Enter, Esc 키에 의한 종료 막기 (Enter Bug) (0) | 2017.08.31 |