2016-05-03 14 views
0

真のエキスパートのための質問:OLEターゲットのペースト操作によってOLEソースがデータの供給を開始するのはどうですか?MFC:メインのスレッドと並行してファイルをエクスポートするWindowsエクスプローラのようなアプリケーション

私はドラッグ&ドロップ(OLEのクリップボード&を使って)どこからでも仮想ファイルをコピー/カット/ペーストするためのMFCベースのWindowsエクスプローラのようなアプリケーションを作成しています。私が今苦労している問題は、メインウィンドウのスレッドと並行してファイルをエクスポートする方法です。私は、COleDataSource::OnRenderFileData関数内の仮想ファイルの内容をエクスポートするようにMFCのアプリだと言った。この関数は明示的に呼び出されたアプリケーションのどこにもありませんが、メインウィンドウスレッドによって呼び出されます。私はそれを掘り起こし、MFCがドキュメントのOnCmdMsg関数によって処理される特定のコマンド(CN_COMMAND)を処理することを発見しました。これは、メインスレッドがOnRenderFileDataを呼び出す方法を説明しています。

しかし、私はVS2010 Express Editionをレガシー(ただし無料)MFC4.2で作業しているため、COMからの魔法のメッセージが受信され、MFCメインスレッドによって処理されるポイントを追跡できません。仮想ファイルをアプリケーションのメインスレッドと並行してエクスポートするために、このような点をオーバーライドしたいと思います。あなたが話している「魔法」のメッセージが遅延レンダリングを要求し、クリップボードの所有者に送信されWM_RENDERFORMAT、ある

トーマス

+0

ドラッグ&ドロップとOLEクリップボードを使用している場合は、おそらく 'IDataObject :: GetData'を介して入ってきます。 –

答えて

1

任意の提案のための

どうもありがとうございました。

私はあなたがそのメッセージハンドラからの復帰前SetClipboardData()を呼び出すことが期待されていることを信じているので、私は別のスレッドが動作できるか表示されません。呼び出し元はSendMessage(..., WM_RENDERFORMAT, ...)が返されるとすぐにクリップボードのデータにアクセスしようとします。

P.S. Express版を使用している理由はありますか? Visual Studio(2013および2015)の新しいバージョンは、実験的および教育的な用途で無料のCommunity Editionで提供されています。 MFCの最新バージョンも含まれています。

+1

Community Editionは商用でも無料です(個人開発者、小規模プロチーム)。 [Visual Studio Community](https:// www)の* "Learn more" *リンクに従って、[ソフトウェアライセンス条項(https://www.visualstudio.com/support/legal/mt171547) .visualstudio.com/products/visual-studio-community-vs)のページをご覧ください。 – IInspectable