Windows フォームで透明な背景と滑らかなエッジを実現するのは難しい場合があります。この記事では、2 つの効果的なソリューションについて概説します。
複雑な形状のフォームの場合、レイヤード ウィンドウが最適なソリューションを提供します。 ウィンドウの構成と再描画を合理化し、複雑な形状でよく見られるちらつきのないスムーズなレンダリングを実現します。 重要なのは、半透明性もサポートしていることです。
階層化ウィンドウの実装
Windows フォームでレイヤード ウィンドウを作成するには、Microsoft SDK コード ギャラリーのコードを利用します (利用可能な場合はコードへのリンク)。 PerPixelAlphaForm
クラスを拡張すると、SelectBitmap
メソッドを使用して透明な PNG 画像を適用できます。
PerPixelAlphaForm.cs
コード スニペット<code class="language-csharp">public partial class PerPixelAlphaForm : Form { // ... constructor and other methods ... public void SelectBitmap(Bitmap bitmap) { // ... implementation to apply the bitmap ... } }</code>
SplashScreen.cs
(使用例)<code class="language-csharp">public partial class Form4 : CSWinFormLayeredWindow.PerPixelAlphaForm { // ... constructor and other methods ... }</code>
重要な考慮事項:
以前のアプローチでは、ダブル バッファリングを無効にし、OnPaintBackground
をオーバーライドして画像を直接描画し、基本メソッドを回避していました。 ただし、この方法には重大な欠点がありました。透明性は静的であるにもかかわらず、完全に機能しました。 しかし、フォームを移動したり、基になるウィンドウを変更したりすると、視覚的なアーティファクトが発生し、正しく更新できなくなりました。 ここで紹介するレイヤード ウィンドウ手法は、この制限を克服します。
以上がWindows フォームで滑らかなエッジを持つ透明な背景を実現するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。