簡體   English   中英

C#NET - 在不透明度級別設置的窗體上繪制不透明畫筆

[英]C# NET - Draw opaque brush on form with opacity level set

我想要實現的是覆蓋屏幕的半透明背景。 然后能夠在它上面繪制不透明的畫筆。

我試過的是一個具有屏幕大小的表單,然后設置它的顏色並設置this.opacity = 0.5 但是這會影響表單中的所有畫筆。

我也嘗試將背景顏色設置為Color.Transparent,然后繪制一個覆蓋屏幕的額外畫筆,不透明度為0.5,然后繪制不透明畫筆......但背景也變得不透明。 即使設置了樣式標志(ControlStyles.SupportsTransparentBackColor, true)

我知道我可以通過增加一個表格來達到這個目的。 一個用於透明背景的表單和一個用於不透明前景的表單,但這不是太過分了嗎?

有沒有更好的辦法?

更新1:嘗試評論中建議的內容。

當前狀態:Form1:主程序,要求顯示“疊加”,即:Form2:疊加背景(半透明黑色)和Form3:疊加前景,這是用戶繪制的位置。

表單1和表單2表示為indended,但Form3拒絕使用透明表單。 如果我訂

this.BackColor = Color.Lime;
this.TransparencyKey = Color.Lime;

然后性能下降,程序嚴重滯后(雖然它確實變得透明)。 理想情況下我想要使用this.BackColor = Color.Transparent; 然而,這沒有任何影響(固體背景,沒有阿爾法)。

請注意,表單覆蓋屏幕,背景通常是桌面。 也許這就是為什么它不起作用?

您可以覆蓋表單的OnPaintBackground ,而無需調用它的基礎。 這將使您能夠為背景指定所需的顏色。

嘗試這個:

protected override void OnPaintBackground(PaintEventArgs e)
{
    using (var brush = new SolidBrush(Color.FromAgrb(50, 0, 0, 0))
    {
        e.Graphics.FillRectangle(brush, e.ClipRectangle);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM