- PR -

VC++.NET2003で遅延ドラッグ&ドロップにいて

1
投稿者投稿内容
wbird
会議室デビュー日: 2005/11/24
投稿数: 5
投稿日時: 2005-12-27 21:06
COleDataSourceから派生クラスを作成し

DelayRenderFileData( CF_HDROP );

してエックスプローラーにドラッグして持っていたらドロップしないうちに
すぐに

OnRenderFileData

が呼び出されます。エクセル等のアプリはドロップした時点で呼び出されます。

エックスプローラーでもドロップした後に呼び出されるようにするには何か
違いがあるのでしょうか?お分かりの方教えてください。

Tdnr_Sym
ぬし
会議室デビュー日: 2005/09/13
投稿数: 464
お住まい・勤務地: 明石・神戸
投稿日時: 2005-12-28 00:33
こんばんは。

引用:

wbirdさんの書き込み (2005-12-27 21:06) より:
COleDataSourceから派生クラスを作成し

DelayRenderFileData( CF_HDROP );

してエックスプローラーにドラッグして持っていたらドロップしないうちに
すぐに

OnRenderFileData

が呼び出されます。エクセル等のアプリはドロップした時点で呼び出されます。

エックスプローラーでもドロップした後に呼び出されるようにするには何か
違いがあるのでしょうか?お分かりの方教えてください。



ドラッグ&ドロップの遅延レンダリングですね。
普通はドロップされた直後に、実際のデータに対する問い合わせがあるはずなのですが…
wbirdさんの仰る現象は未確認ですので、ハッキリした事はなんともいえないですけれども…

引用:

DelayRenderFileData( CF_HDROP );


この部分はなんだか、おかしくないですか?
#私の思い違いかもしれませんけれども。
wbirdさんは結局どんなデータをドロップしたいのでしょうか?


渡したいデータのフォーマットがCF_HDROPならば…
(つまりグローバルヒープに DROPFILES構造体 のデータを渡したいのであれば)
DelayRenderFileDataを使うのは間違っているとおもいます。
DelayRenderFileDataは「CFileオブジェクトのデータ」を渡すために使うのですから。
それにCF_HDROPデータをわざわざ遅延レンダリングする必要性も感じにくいのですが。
即時レンダリングで十分じゃないのでしょうか?


逆に、渡したいデータがCFileオブジェクトのデータであれば…
(つまりカスタムなクリップボードフォーマットのデータを渡したいのであれば)
RegisterClipboardFormat関数で、カスタムフォーマットであることを知らせる必要があるでしょう。
(エクスプローラーやエクセルにはドロップできなくなりますけれども)
こんな感じで…
コード:
UINT myClipbordFormat = RegisterClipboardFormat("myClipbordFormat");

DelayRenderFileData(myClipbordFormat);




どうでしょうか?
wbird
会議室デビュー日: 2005/11/24
投稿数: 5
投稿日時: 2005-12-28 01:06
早速のご返答ありがとうございます。

遅延レンダリングでエックスプローラーにファイルを渡さなければならないのです。

というのもWebサイトからファイルをエックスプローラーにダウンロードするために
いたんテンポラリーディレクトリにダウンロードし遅延レンダリングでそのファイルを
渡そうとしています。
1

スキルアップ/キャリアアップ(JOB@IT)