ListView_DeleteItemの副作用をなくすには?

解決


ゆうき  2004-02-05 13:30:18  No: 53123

VC++6のSDKです。
  ListView(REPORT)で降順ソートしたリストからいくつか選択しカット、
そのままペーストして再度ソートすると結果が異常です。
例えば、ファイルのリスト(ファイル名とサイズ)に於いて、サイズによる
降順ソートをして上3つぐらい選択カット。そのままペーストすると下に
追加されますが、ソート(今度は昇順)すると、一つ置きぐらいにペースト
したアイテムが表示されます。正常にする方法はありますでしょうか?

・DeleteItemの後はクリップボード関係以外なにもしたいない。
・ペースト時はGetItemCountで取得した数に追加している。

  単にペーストするだけならこの症状は出ません。DeleteItemの後に何か
必要なんでしょうか?


ゆうき  2004-02-08 11:22:23  No: 53124

自己解決。
  寝床に入ったら閃きました。
「あっ、LPARAM!」
追加時、indexと同じ値を入れていました。それで、再割り当てすてやる
事で解決したました。

  しかし、何か良い方法ないかな?LPARAMにユニークな値をいれる方法。


シャノン  2004-02-09 02:10:08  No: 53125

ソートに使う比較関数をどうやって書いてます?

なんか巷には、SortItems を呼ぶ前にアイテムの lParam をインデックスと同じ値に再割り当てしているサンプルが多いようで。
これは、比較関数に渡された lParam をインデックスの代わりに使って GetItemText を呼んでいるためですね。ゆうきさんのもこうでしょうか?

比較関数で GetItemText を使うためにアイテムのインデックスを得る必要がある…これを横着しているわけです。
FindItem を使って、lParam からインデックスを求めれば、lParam が何だろうと GetItemText は可能です。
また、SDK ならば SortItemsEx も使えるかも。
コイツは比較関数に lParam ではなくインデックスを渡してくれる親切なやつです。


ゆうき  2004-02-09 12:47:16  No: 53126

>ソートに使う比較関数をどうやって書いてます?

  猫にあったやつを参考にしました。FindItemを使っていますが、
lParamが重複していたと思われます。

>また、SDK ならば SortItemsEx も使えるかも。
>コイツは比較関数に lParam ではなくインデックスを渡してくれる親切なやつです。

  こんな便利なものがあったんですね。


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

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






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