CListCtrl の SortItems + FindItem でエラー

解決


みかん  2006-07-02 18:31:12  No: 62398

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);
        }
}


みかん  2006-07-03 04:16:46  No: 62399

原因は分かりませんでしたが、SortItems() を呼び出す前に列を挿入し、呼び出し後に削除するようにしたら、正常にソートできるようになりました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加