ドラッグが完了するまでブロックせずにC++ Win32アプリケーションからOLEファイルのドラッグを開始する方法があるかどうかは知っていますか?非同期OLEドラッグ&ドロップが可能ですか?
ドラッグ操作を開始するのに現在DoDragDrop()を使用していますが、ドラッグ操作が完了するまでこの関数は戻りません。 これは、ドラッグが進行中のときにプログラム内のアニメーションが停止するという問題があります。
新しいスレッドからこのコマンドを起動しようとしましたが、このスレッドでOleInitialize()を呼び出しても機能しませんでした。
これに関連することがわかったのは、あとで(ファイル/データのコピー/移動など)非同期でデータ操作を行うことでした。私のアプリケーションでは、&のドラッグはそのような操作には使用されないため、問題ではなく、主な問題はユーザーがドラッグを実行している間のブロックです。 編集:これについてもっと明確にするために、DataObjectのIAsyncOperationは、データが非同期にドロップされた後にのみ操作を実行するため、この問題の解決策ではありません。 私が持っている問題は、ユーザーがマウスボタンを離す瞬間までドラッグを開始するポイントからのブロック動作です。
2つの解決策が考えられますが、これを達成するためのより簡単な方法があることを願っています。
私自身の(non-ole)ドラッグ&ドロップを実装します。これはもっとうまくいくはずですが、実際には自分のプログラム内から他のプログラムにファイルをドラッグすることが可能であるという素晴らしい機能が見つかりました。
新しいプロセスを作成/起動し、そこからドラッグ操作を開始します。アプリケーション内のWindowsエクスプローラからファイルをドラッグしても問題はないので、これはうまくいくと思います。 ドラッグはすぐに開始するはずです。新しいプロセスを作成するのに目立つ時間があるかどうかはわかりません。