重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

アプリケーションからデスクトップへOLEを使用してドラッグ&ドロップした際、
コピーさせるファイルを収集したいのですがどのようにすればよいのでしょうか?

ドラッグ開始時、DoDragDrop()を呼び出すと
後はターゲットとなるアプリケーションがDrop()で受け取ってしまい
ファイル収集処理を入れる余地がありません。

OLEを使用しているからできないのでしょうか?
他の方法は知らないもので。

Windows2000、VisualC++6.0です。
何かご存知の方教えてください。

A 回答 (3件)

以前作ったソースを見つけました。


しかしサンプルソースではないので、お見せしても意味がないと思います。
よく覚えていませんが、手元のソースを見る限り以下のようにすればよいと思います。
ただし、『即時レンダリング』にくらべ手間がかかる覚悟が必要ですね。
(※注:以下の内容に責任は取れません。間違った点等、見つけられた人がいらっしゃいましたら
 ご指摘ください。)

【クリップボード形式の登録】
・アプリケーション起動時にRegisterClipboardFormat関数でアプリケーション用クリップボード形式を
 登録しておきます。
 (CF_HDROPなど既存のクリップボード形式を使う場合は必要ありません。)

【COleDataSource派生クラスの作成】
1.COleDataSourceの派生クラスを作成します。
2.COleDataSource派生クラスでOnRenderXXXをオーバーライドします。
3.OnRenderXXXにドロップ時の処理を記述します。
 ・引数のクリップボード形式をチェックして、
  アプリケーションがサポートしているものかチェックして処理を行います。
 ・別のクラスで処理したい場合は、あらかじめポインタを派生クラスに保持しておいて
  処理を委譲するなどすればよいと思います。

【ドラッグ元のウィンドウの処理】
1.ドラッグ開始時にCOleDataSource派生クラスのインスタンス pSource を作成します。
2.pSource->DelayRenderData()を呼び出します。
3.pSource->DoDragDrop()を呼び出します。

【蛇足ですが】
以前作ったソースでは、COleDropTargetクラスを派生させて、そこでドラッグイメージの処理を行っています。
    • good
    • 0

質問の意図と違いましたらすいません。



私も3年前に仕事でそのようなプログラムをつくったように思います。
「遅延レンダリング」を使ってみてはどうでしょうか?
ドラッグ開始時ではなくドロップ時に処理を行いたいときに便利です。

もしMFCを使われているのであれば、COleDataSourceクラスのDelayRenderData()を使えばできたような・・・

手元に参考資料がないので具体的な回答ができなくて申し訳ありません。
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/26 17:39

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



参考URL:http://homepage2.nifty.com/inform/vbmania/source …
    • good
    • 0
この回答へのお礼

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

お礼日時:2003/03/17 22:07

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!