ドロップターゲットとして機能するMFCウィンドウがあります。ユーザーが特定の種類のデータをドロップする場所に応じて、カーソルの形状を変更して、どのアクションが発生するかを示したいと思います。アクションのみが移動/コピー/リンクではなく、カスタムカーソルを使用するより複雑なアクションです。
これが役立つ場合の例です。ユーザーがファイルをドロップできる2つの正方形のウィンドウがあるとします。最初の正方形ではファイルが電子メールで送信され、2番目の正方形ではファイルがDropboxに保存されます。電子メールカーソルとドロップボックスカーソルが1つずつあり、ユーザーが正方形の上にカーソルを合わせると、それに応じてカーソルが変化します。
MFCでは、COleDropSourceオブジェクトを作成し、そのGiveFeedback()メソッドをオーバーライドして、これを正確に行うことができます。ただし、これは、そのオブジェクトをCOleDataSource :: DoDragDrop()に渡すことができる場合、つまり、自分でドラッグ操作を開始した場合にのみ機能します。ドラッグがアプリケーション内で発生した場合、このメソッドは機能し、目的のカーソルタイプを取得できます。ドラッグがWindowsエクスプローラーから発生した場合、独自のCOleDropSourceオブジェクトを提供する機会がないため、カーソルの形状をオーバーライドできません。
OnDragOver()でカーソルを直接設定することは機能しません。これは、Windowsがそのメソッドの結果値を使用してカーソルを変更するためです。したがって、Windowsがカーソルを標準の形状のいずれかに戻す前に、目的のカーソルがほんの一瞬しか表示されません。 。
これを解決する他の方法はありますか?
(この質問はこれに似ていますが、私はMFCを使用しているだけなので、そこで提案されたソリューションは機能しません。)