• 締切済み

デスクトップへコピー時に処理をしたい

アプリケーションからデスクトップへOLEを使用してドラッグ&ドロップした際、 コピーさせるファイルを収集したいのですがどのようにすればよいのでしょうか? ドラッグ開始時、DoDragDrop()を呼び出すと 後はターゲットとなるアプリケーションがDrop()で受け取ってしまい ファイル収集処理を入れる余地がありません。 OLEを使用しているからできないのでしょうか? 他の方法は知らないもので。 Windows2000、VisualC++6.0です。 何かご存知の方教えてください。

みんなの回答

  • TdnrSym
  • ベストアンサー率0% (0/0)
回答No.3

以前作ったソースを見つけました。 しかしサンプルソースではないので、お見せしても意味がないと思います。 よく覚えていませんが、手元のソースを見る限り以下のようにすればよいと思います。 ただし、『即時レンダリング』にくらべ手間がかかる覚悟が必要ですね。 (※注:以下の内容に責任は取れません。間違った点等、見つけられた人がいらっしゃいましたら  ご指摘ください。) 【クリップボード形式の登録】 ・アプリケーション起動時にRegisterClipboardFormat関数でアプリケーション用クリップボード形式を  登録しておきます。  (CF_HDROPなど既存のクリップボード形式を使う場合は必要ありません。) 【COleDataSource派生クラスの作成】 1.COleDataSourceの派生クラスを作成します。 2.COleDataSource派生クラスでOnRenderXXXをオーバーライドします。 3.OnRenderXXXにドロップ時の処理を記述します。  ・引数のクリップボード形式をチェックして、   アプリケーションがサポートしているものかチェックして処理を行います。  ・別のクラスで処理したい場合は、あらかじめポインタを派生クラスに保持しておいて   処理を委譲するなどすればよいと思います。 【ドラッグ元のウィンドウの処理】 1.ドラッグ開始時にCOleDataSource派生クラスのインスタンス pSource を作成します。 2.pSource->DelayRenderData()を呼び出します。 3.pSource->DoDragDrop()を呼び出します。 【蛇足ですが】 以前作ったソースでは、COleDropTargetクラスを派生させて、そこでドラッグイメージの処理を行っています。

  • TdnrSym
  • ベストアンサー率0% (0/0)
回答No.2

質問の意図と違いましたらすいません。 私も3年前に仕事でそのようなプログラムをつくったように思います。 「遅延レンダリング」を使ってみてはどうでしょうか? ドラッグ開始時ではなくドロップ時に処理を行いたいときに便利です。 もしMFCを使われているのであれば、COleDataSourceクラスのDelayRenderData()を使えばできたような・・・ 手元に参考資料がないので具体的な回答ができなくて申し訳ありません。

yuyama
質問者

お礼

ありがとうございます。調べていてそれを見つけたのですが、実装方法がわからず断念してしまいました。 何か情報があれば教えていただけますか? 検索でもほとんど引っかからないもので。

  • todo36
  • ベストアンサー率58% (728/1234)
回答No.1

VBならOLESetDataイベントでやればいいのだが

参考URL:
http://homepage2.nifty.com/inform/vbmania/source/drop2explorer.htm
yuyama
質問者

お礼

ありがとうございます。やっぱりなさそうですね。 あきらめて自分でイベント処理を組み込むことにします。