728x90

칼럼을 클릭했을 때, 오름차순 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;

}



출처 : http://blog.naver.com/PostView.nhn?blogId=hji0223&logNo=220661789914&categoryNo=0&parentCategoryNo=0&viewDate=&currentPage=1&postListTopCurrentPage=1&from=postView

728x90

+ Recent posts