ドラッグ&ドロップで、リストビューのコラムヘッダやスクロールバーの上で、OnLButtonUpが効かない

解決


んも  2006-04-01 19:10:57  No: 61110  IP: 192.*.*.*

WINXP  .NET  MFCです。

リストビュー1からリストビュー2へのドラッグ&ドロップの初歩的なコードを作りました。

OnLButtonDown
OnMouseMove
OnLButtonUp
OnLvnBegindrag

を使い、bool nFlgがtrueの時に、カーソルを差し替えるようにしました。
OnLButtonUpで、nFlg=false; です。

だいたい問題なく動いているのですが、ドラッグ中にリストビューのコラムヘッダやスクロールバーの上で、マウスボタンから指を離しても、OnLButtonUpが呼ばれません。
その結果、nFlgがfalseにならないので、指はボタンから離れているのに、ポインタがコラムヘッダやスクロールバーの外に出ても、カーソルはドラッグ&ドロップ用のもののままになります。
(コラムヘッダやスクロールバーの上では、逆にカーソルはデフォルトの矢印に戻っています。)

SetCapture();も、別なコントロールにドラッグする時は、使えないようで、
(過去ログにありました)
煮詰まりました。

アドバイスをお願いいたします。

編集 削除
forty-five  2006-04-02 01:16:43  No: 61111  IP: 192.*.*.*

たしか LVN_BEGINDRAG ってただの通知メッセージで
ドラッグ & ドロップの実装は自分でやるものだったと思います。
なので実際の処理は自分で ::SetCapture() するなり
::DoDragDrop() 呼び出すなりしないとダメだったと思います。

編集 削除
んも  2006-04-02 04:31:10  No: 61112  IP: 192.*.*.*

もしかしたら、forty-five さんのお話を正しく理解していないかもしれませんが、もちろん実装してあるのです。
ほぼ問題はなく動きます。
ただ、マウスポインタがリストビューのスクロールバーとコラムヘッダの上にある時だけ、OnMouseMoveやOnLButtonUpが呼ばれなくなってしまうのです。

編集 削除
んも  2006-04-02 17:44:22  No: 61113  IP: 192.*.*.*

自己解決しました。

m_list1からm_list2にドラッグ&ドロップするのに、m_list1のOnLButtonUp
でReleaseCaptureした後で、m_list2の座標を取得して、マウスポインタがその範囲内にある時に処理を行い、そのままm_list1のクラスからm_list2を再描画しました。
OnLButtonUpでの座標は、m_list1の左上が原点でした。

編集 削除