部分的に透明な黒い背景を描画するフォームで .NET 3.5 アプリを作成しています。これを達成するために OnPaintBackground をオーバーライドしています:
protected override void OnPaintBackground( PaintEventArgs e )
{
using ( Brush brush = new SolidBrush( Color.FromArgb( 155, Color.Black ) ) )
{
e.Graphics.FillRectangle( brush, e.ClipRectangle );
}
}
機能しますが、フォームが画面をクリアせずに描画され、透明度が本来よりも暗くなることがあります。Graphics.Flush()
とで遊んでみましたGraphics.Clear()
が、役に立たないか、透明度が完全に削除されます。助言がありますか?
編集: 左側でアプリを起動した後、右側で (あるコントロールから別のコントロールへのタブ移動に応答して) フォームが数回再描画された後、次のようになります。
透明性の問題 http://www.quicksnapper.com/files/5085/17725729384A10347269148_m.png
編集 2: 今朝いくつか試してみたところ、透明な部分の背後にあるデスクトップが変更されたときに、実際には再描画されていないことに気付きました。たとえば、タスク マネージャーを開いてウィンドウの後ろに置いた場合、それ自体が更新されることはありません。これは、私が透明度レベルで見てきたことから理解できます。ウィンドウの後ろの領域を Windows に再描画させる機能はありますか?
編集 3: フォームのいくつかのプロパティを変更しようとしましたが、すべてフォームが非透明な黒で描画されます。
this.AllowTransparency = true;
this.DoubleBuffered = true;
this.Opacity = .99;
オーバースラッキングで述べたように、透明部分用に別のウィンドウを作成してみますが、他のアイデアはまだ歓迎されています。