Last Updated 2003/01/31
Programming Tips Visual C++ MFC CListView(CListCtrl)  索 引 
ソート
2003/01/31

CListView にてソートを行う.
ヘッダーをクリックすることによりソートを行うのが一般的だ.

比較を行うコールバック関数が必要となる.

int CALLBACK CMyListView::CompareFunc(LPARAM lP1, LPARAM lP2, LPARAM lPSort)
{
}


=LVN_COLUMNCLICK メッセージハンドラを追加する.
CListCtrl::SortItems() を呼び出す.その際比較を行うコールバック関数のポインタを渡す.

void CMyListView::OnColumnclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
    NM_LISTVIEW* pNMListView = (NM_LISTVIEW*)pNMHDR;
    GetListCtrl().SortItems(CompareFunc, pNMListView->iSubItem);
    *pResult = 0;
}

SortItems() に渡している CompareFunc() には SetItemData() で設定した LPARAM の値が渡される.

CListView はたいてい複数カラムが存在する.その各々のカラムにてソートをするには LPARAM 1つの値では不足してしまう.
ここで LPARAM にはポインタを渡しておく.そして CompareFunc() にて LPARAM をポインタに直しそこからのデータにてソートするとよいであろう.


参照
クラス内コールバック関数
ソートマーク
前後のTips
ソート

DSS ProgrammingTipsCGI Ver2.01