プロが教えるわが家の防犯対策術!

MFCのCListView内の表示されるアイテムのドラッグ&ドロップを許容させるにはどうすればいいのでしょうか?

外からのドロップはMainFrameでキャッチできたのですが、CListView内でのドラッグ&ドロップがどうしてもできないので、お分かりになる方がいましたら、教えていただけないでしょうか?

A 回答 (2件)

つまりLVN_BEGINDRAGのメッセージハンドラを追加しても呼び出されない、という状況ですね。



VisualC++.NET 2003 MFC使用 SDI CListViewのモードはreport という環境で試してみました。
LVN_BEGINDRAGのメッセージハンドラを追加した後、
リストビューのアイテムをドラッグしようとすると、このハンドラが呼び出されました。
reportモードにした他はスタイルを変更していません。
    • good
    • 0
この回答へのお礼

おおーー!!
そうです。まさにそうです。
reportモードにしたらLVN_BEGINDRAGのメッセージハンドラが呼び出されました。

これで後続処理が追加できます。

MASATO3さんありがとうございました。

お礼日時:2005/02/22 20:43

私が前にリストビューからドラッグ&ドロップが可能なアプリケーションを作ったときは、


フラグを一つ立てればお終いというような簡単な話ではありませんでした。
結構大変だと思いますので御覚悟下さい。

今回の質問ですが、
(1) 一つのアプリケーションのウィンドウ内だけでドラッグ&ドロップが完結すれば良い
(2) それとも他のアプリケーション(デスクトップ含む)にまでドロップできるようにする
という2点のどちらを求めているのかによって答えがだいぶ変わります。

(1)の場合でしたら、
ドラッグ&ドロップの開始をLVN_BEGINDRAGメッセージハンドラで捕らえ、
CWnd::SetCaptureでマウスがウィンドウの外に出ても大丈夫なようにしておき、
ドロップをOnLButtonUpで捕らえてドロップ処理を行い、
ドロップ処理を行った後ReleaseCaptureでマウスを解放する、という流れになります。

(2)の場合でしたら、
ドラッグ&ドロップの開始をLVN_BEGINDRAGメッセージハンドラで捕らえ、
COleDataSourceインスタンスを作成し、
COleDataSourceインスタンスにドラッグ&ドロップ用のデータを設定し、
COleDataSource::DoDragDropを呼び出してドラッグ開始

ドロップ処理の方は外からのドラッグ&ドロップを捕らえる方法(COleDropTargetを使う方法)と
同じですので省略します。

(2)の方が大変だと思います。
「ドラッグ&ドロップ用のデータ」の形式など、上記以外に
調べることも考えることもたくさんあります。
もCOleDataSourceをキーワードに検索サイトで色々調べてみて下さい。

この回答への補足

実現させたいのは(1)です。
質問の補足なのですが、現状リストビューのアイテム自体がドラッグできない状態で、(アイテムを左クリックで選択はできるが、ドラッグでアイテムを掴めない)これは、Window生成時のスタイル指定が不足しているのでしょうか?
ですので現状は(1)よりさらに前です。
すいません。質問内容が薄かったです。

補足日時:2005/02/22 11:39
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!