C# Winforms アプリ、Windows 10。
フォームには、リッチテキスト ボックスとチャート (両方とも MS) があります。現在、richtextbox をクリップボードにコピーする機能があります。
Clipboard.SetText(rtbContents.Rtf, TextDataFormat.Rtf);
チャートを画像としてクリップボードにコピーする関数:
using (MemoryStream ms = new MemoryStream())
{
chart1.SaveImage(ms, ChartImageFormat.Bmp);
Bitmap bm = new Bitmap(ms);
Clipboard.SetImage(bm);
}
両方を 1 つの単位 (上部にリッチ テキスト、下部に画像) としてコピーする機能が必要です。これにより、ctrl-v で両方を Word 文書などに貼り付けることができます。
色、フォントサイズ、特殊文字を失うことなくオブジェクトにリッチテキストを保存する際に、IDataObject を試してみました。また、IDataObject は一度に 1 つしか貼り付けることができず、ターゲット アプリケーションが最も必要としているものを感知するだけのようです。
DrawString を使用して bmp を組み合わせたり、リッチ テキストで複数の色を保持する際に問題が発生したり、ビットマップを組み立てたり連結したりしようとしました。
CopyFromScreen を試し、複数のモニターを使用して実際の場所 (画面ではなくコンテナーに対する this.Location.X) を決定する場所に問題があり、仕様を正確に満たしていません。言うまでもなく、デバッグしようとすると、代わりに Visual Studio の表示のチャンクがコピーされます。
オープンソースのサードパーティのソリューションは問題ないかもしれません。いくつか探しましたが、この機能を実行できるものは見つかりませんでした。Win32 API 呼び出しは最後の手段です。
ご協力いただきありがとうございます。