CListCtrl::SortItems() で列のソートを行おうとしているのですが、
CListCtrl::FindItem() が -1 を返す場合がありうまくソートされません。
色々検索した所、http://www.hey-to.net/ML-archive/vcppML/1999/msg10563.html と同じ現象だと思うのですが、ここでは解決されておらず困っています。
原因や対策など分かる方がいらっしゃいましたら教えてください。
開発環境:
Visual C++ 6.0
Windows XP
条件:
・サブアイテムは無い。
プログラム抜粋:
int CALLBACK MyListCtrl::CompareItem(
LPARAM item1, LPARAM item2, CompParamType *comp_param)
{
// 比較するアイテムを検索する
MyListCtrl *list = comp_param->list;
LV_FINDINFO find_info;
find_info.flags = LVFI_PARAM;
find_info.lParam = item1;
int item1_index = list->FindItem(&find_info, -1);
find_info.lParam = item2;
int item2_index = list->FindItem(&find_info, -1);
// テキストを比較する
CString text1 = list->GetItemText(item1_index, comp_param->column);
CString text2 = list->GetItemText(item2_index, comp_param->column);
if ( comp_param->order == ORDER_ASCENDING ) {
return text1.CompareNoCase(text2);
}
else {
return text2.CompareNoCase(text1);
}
}
原因は分かりませんでしたが、SortItems() を呼び出す前に列を挿入し、呼び出し後に削除するようにしたら、正常にソートできるようになりました。
ツイート | ![]() |