2011-02-09 27 views
2

基本的に私はドラッグアンドドロップアクションのプロセスでユーザーが拡張マルチ選択ツリーコントロールのCTreeCtrlラベル編集の熱心なデフォルト動作を抑止するかどうかを判断するかどうかを判断する必要があります。DragDetectはいつ、そしてどのように役立ちますか?

CWnd::DragDetectは、ユーザーが左ボタンを下にして定義済みの矩形の外にマウスを移動したときにtrueを返します。私はこの戻り値を::OnMouseMoveに使用して、特定のGUIエフェクトやアクションを有効または無効にするドラッグ操作が進行中かどうかを判断することを考えていました。

サウンドはすべてうまくいっていますが、これは本当に同じマウスポイントを取って選択したアイテムでヒットテストを行う以上のものですか?とにかくドロップターゲットのヒットテストを済ませなければならないので、これは完全に不要な方法のようです。

Googleはこのメソッドの使用例を示していませんでした。また、結果も返されませんでした。これが有用な方法であるかどうか、これが意図された使用ではない場合、私は好奇心が強いです。

誰もこれまでにこれを使用しましたか?

+0

Newton-Raphsonを自分で実装できるので、 'Math.Sqrt()'は完全に不要なメソッドですか? –

+0

@Anon point taken ...しかし、これはstd :: stringにsize()に加えてlength()を持つことに似ているようです。 – AJG85

+0

DragDetectの矩形のサイズは、ドラッグしているオブジェクトのサイズと必ずしも同じではありません。これは、文字列の文字数を取得するメソッドと、文字が占めるバイト数を取得するメソッドの両方を持つようなものです。 –

答えて

2

WM_LBUTTONDOWNハンドラーからDragDetectを呼び出して、ユーザーがアプリケーションから何かをドラッグしようとしているかどうかを確認します。 trueを返す場合、これはドラッグ操作の開始点です。それが偽であれば、そうではありません。真の復帰後、マウスを追跡してヒットテストを開始し、もしあればフィードバックを提供します。この時点でカーソルを少なくとも変更する必要があります。最後にWM_LBUTTONUPに、最終的なヒットテストを行い、ドロップターゲットが何であるかを確認します。

+0

これは、ウィンドウ間のドラッグアンドドロップ操作を検出する場合に、より便利ですか?それ以外の場合はTVN_BEGINDRAGメッセージが表示されず、ヒットテストで十分ですか? – AJG85

+1

@ AJG85、ウィンドウ内またはウィンドウ間では、マウスをキャプチャしている限り、違いはありません。 TVN_BEGINDRAGはツリーコントロールに固有のもので、DragDetectは任意のウィンドウで機能します。 –

+0

ああ、それは私の特定の使用法はツリーコントロールのコンテキスト内でしかないので、好奇心がどこから来たのかが分かります。 – AJG85

関連する問題