- ベストアンサー
リストビューでのドラッグ&ドロップでの反転表示
- VC++にてエクスプローラもどきを作成し、ドラッグ&ドロップの操作を実装中です。
- ListViewのドラッグ中に別フォルダへカーソルが移動した際に、そのフォルダを反転させるための処理で困っています。
- 具体的な問題は、ドラッグされたフォルダの反転表示が綺麗ではないことと、カーソル下に何のフォルダもない場合の処理が正しく行われていないことです。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんにちは。補足頂きました。 全てのアイテムの選択状態を解除しながら、全てのアイテムを描画して行くと言うのでは駄目でしょうか。 for ( i = 0; i < list.GetItemCount(); i++ ) { item.iItem = i; ListView_GetItem( list, item ); item2.state = 0; item2.stateMask = LVIS_SELECTED; ListView_SetItem( list, &item ); //http://msdn.microsoft.com/en-us/library/aa453381.aspx //http://msdn.microsoft.com/ja-jp/library/k6y18z6a(VS.80).aspx //ココでアイテムを書き直す ListView_Update(list, i); } 其の他、選択解除をした後アイテムを描くのではなく、リストビューコントロール全体を問答無用に再描画すると言う手段では駄目でしょうか。 http://msdn.microsoft.com/ja-jp/library/ax04k970(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/2f3csed3(VS.80).aspx http://msdn.microsoft.com/ja-jp/library/cc410421.aspx
その他の回答 (1)
- machongola
- ベストアンサー率60% (434/720)
こんばんは。 ドラッグ移動中に下に有るアイテムが反転すると言う事でしょうか。 う~む、取り敢えず、反転させる度にリストコントロールを再描画させて見ては如何でしょうか。 それ以外であるならばオーナードローでする事なのかもしれません。
補足
RedrawItemを行うことで、『1』の反転表示に関しては綺麗になりました。 ありがとうございました。 『2』に関してはRedrawItemでも改善しませんでした。 選択状態クリアの方法が間違っているのか。。。 (ちなみに、全ての選択状態をクリアするコーディングですが、 変数がitemとitem2で混在してましたが、記述ミスで、全てitem2です。)
お礼
お返事ありがとうございます。 前回の補足記入後に、自己解決しました。 ListView_SetItemでitemの設定をし直すのではなく、 ListView_SetItemStateで状態だけを変更し、 RedrawItemsで再描画をしてやると上手くいきました。 ListView_SetItemで上手く行かないのは謎ですが。 ListView_Updateでも試してみましたが、 フォーカスが外れたフォルダの反転表示が 添付画像のように一部残ってしまい綺麗ではありませんでした。 OnDragOverで毎回再描画させてしまっているので、 画面のちらつきが気になるところですが、 とりあえずは、一旦終了することにします。 再度、改良する際に、またお力をお借りするかもしれませんが。 ありがとうございました。