コントロールのOnPaint()メソッドでe.Graphics.CopyFromScreen()を使用して、コントロールのコンテンツを描画できる背景を準備しようとしています(これはすでに問題になっている可能性があります)。目標は、角が丸いツールチップと、デフォルトのWindowsツールチップを置き換えるその他の特定の機能です。
理想的には、ツールチップをアンチエイリアシングして背景にブレンドすることができますが、ピンチでエイリアシングされた境界を許容できます。コントロールがOpenGLオーバーレイでコントロールをカバーすることが多く、ブレンド手順全体が悪夢になる可能性があるため、これも必要になる場合があります。
カスタムユーザーコントロールを作成しました。この永続的なインスタンスは、アプリケーションのメインフォームに属し、OnPaintメソッドとOnPaintBackgroundメソッドをオーバーライドします。ただし、透明性の適用は困難です。私が理解しているように、paintメソッドに渡されるグラフィックスオブジェクトは、現在のVisibleClipBoundsのコピーから始まります。通常、最初の動きは、コントロールを単色でクリアして、主要なフィーチャの描画を開始することです。私の最初の考えは、塗りつぶしをバイパスして、キャプチャされた背景に描画を開始することでした。最初の再描画ではこれは正常に機能しますが、その後の再描画では、背景を再キャプチャするのではなく、前のコンテンツが保持されます。CopyFromScreenが、現在描画しているコントロールをキャプチャから明確に削除して、クリーンなベースから開始することを望んでいましたが、そうではありません。
他のソリューションとその順列など
SetStyle(ControlStyles.SupportsTransparentBackColor, True)
Me.BackColor = Color.Transparent
e.Graphics.Clear(Color.FromArgb(0,0,0,0))
これまでのところ、適切な結果は得られていません。
透明なキーカラーを使った透明なフォルムから始めました。これはエイリアシングで機能しましたが、ツールチップとしてフォームを使用すると、タスクバーボタンの一時的な存在、基になるフォームのフォーカスの喪失、その後のホストフォームのタイトルでの視覚的なフィードバックなど、厄介なアーティファクト(一部は克服できる可能性があります)が発生しました。バーの色。コントロールははるかに軽量ですが、私はそれをフォームと同様に機能させるのに苦労しています。
この時点で、目的の結果を達成する方法と、CopyFromScreenがそのソリューションの一部であるかどうかを尋ねるだけです。