0

ドロップターゲットとして機能するMFCウィンドウがあります。ユーザーが特定の種類のデータをドロップする場所に応じて、カーソルの形状を変更して、どのアクションが発生するかを示したいと思います。アクションのみが移動/コピー/リンクではなく、カスタムカーソルを使用するより複雑なアクションです。

これが役立つ場合の例です。ユーザーがファイルをドロップできる2つの正方形のウィンドウがあるとします。最初の正方形ではファイルが電子メールで送信され、2番目の正方形ではファイルがDropboxに保存されます。電子メールカーソルとドロップボックスカーソルが1つずつあり、ユーザーが正方形の上にカーソルを合わせると、それに応じてカーソルが変化します。

MFCでは、COleDropSourceオブジェクトを作成し、そのGiveFeedback()メソッドをオーバーライドして、これを正確に行うことができます。ただし、これは、そのオブジェクトをCOleDataSource :: DoDragDrop()に渡すことができる場合、つまり、自分でドラッグ操作を開始した場合にのみ機能します。ドラッグがアプリケーション内で発生した場合、このメソッドは機能し、目的のカーソルタイプを取得できます。ドラッグがWindowsエクスプローラーから発生した場合、独自のCOleDropSourceオブジェクトを提供する機会がないため、カーソルの形状をオーバーライドできません。

OnDragOver()でカーソルを直接設定することは機能しません。これは、Windowsがそのメソッドの結果値を使用してカーソルを変更するためです。したがって、Windowsがカーソルを標準の形状のいずれかに戻す前に、目的のカーソルがほんの一瞬しか表示されません。 。

これを解決する他の方法はありますか?

(この質問はこれに似ていますが、私はMFCを使用しているだけなので、そこで提案されたソリューションは機能しません。)

4

1 に答える 1

0

ソースアプリケーションがユーザーのフィードバックに責任を負っているのではないかと思います。IDropTargetを介してソースアプリケーションにヒントを提供できますが、そのフィードバックを使用するのはソースの責任です。

それは本当に理にかなっています。ソースアプリケーションは、データが何であるか、そしてそれを使って何ができるかを本当に知っているアプリケーションです(zipファイルからファイルをドラッグすることなどを考えてください)。

于 2012-09-25T08:34:12.507 に答える