環境 VS2005 XP
ダイアログベースで開発していますが、
リストコントロール上でのマウスの操作(リスト選択、ドラッグ&ドロップ)
でリストをソートさせたいと思っています。
ダイアログベースですが、メッセージループを作って
MOUSEMOVEのメッセージを拾えるようにするのでしょうか?
実装方法がわからないので教えてください。
よろしくお願いします。
ソートは目的で、選択した行を同じコントロール上の別の位置に
Drag&Dropで移動したいということですね(確認)。
MFCの場合なら、リストからのノティファイであるLVN_BIGINDRAG
に応答したり、OnDropをオーバーライドする方法が一般的です。
ドロップ先が同じコントロールであれば、クリップボードも
使用する必要はありません。
選択中の行のリストを得るには
CListCtrl::GetNextItem()
を使います。
とりあえず、とっかかりだけ。
大変参考になりました。
なにかみえてきました。
ありがとうございます。
リストコントロール上のドラッグ&ドロップでドラッグ中も
ドラッグされているものを描画しようと考えています(dragmove)
リストコントロールの1行目をドラッグ&ドロップするとうまくいくのですが、
2行目以降の行を選択するとドラッグ中に黒い長方形(リストの1行分の幅)が
ドラッグ中に描画されます。
また、2行目以降は黒い長方形の描画位置が1行目をドラッグするときの位置に
なってしまいます。
1行目だけは意図したとおりの動作ができるのですが、2行目以降は上記のように
なってしまします。
APIはエラーを返さないのでどこが問題なのかわかりません。
流れ的には
CreateDragImage
Begin
Drag
DragEnter
DragMove
DragLeave
EndDrag
エラーの内容を読む限りでは
CreateDragImageを呼ぶ際の引数が間違っているかCImageListの削除忘れかと思います。
描画位置はDragEnter、DragMoveで値がちゃんと渡せてないかもです。
一部でもソースをあげてもらえるなら皆が教えやすいかと。。。