Windows窗體使用GDI繪製和GDI +,這是在他們的正確處理透明度的能力有限,因爲在最初創建GDI時,透明度是不是在因素的特徵。話雖這麼說,有一些功能會在某種程度上處理透明度,如AlphaBlend函數。
因此,您可能想知道「您如何在Windows Forms中實現透明度?」 - 它不是「真正的」透明度,更多的是爲GDI(因此也就是Windows窗體控件)提供「透明度」的後事(或破解)。
這個技巧是UXTheme的一部分,稱爲DrawThemeParentBackground,它基本上查看控件下方的內容,並在繪製子控件之前將其繪製到表面。
嘗試子類控制和Color.Transparent填充它的客戶區:
public class TestControl : Control
{
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.Clear(System.Drawing.Color.Transparent);
}
protected override void OnPaintBackground(PaintEventArgs pevent)
{
pevent.Graphics.Clear(System.Drawing.Color.Transparent);
}
}
控制繪製完全黑了吧?那是因爲GDI並不知道「透明」是什麼。
所以你需要重寫你的OnPaintBackground事件,並在那裏執行對DrawThemeParentBackground的調用。
而且,試試這個:
- 創建一個表單,並設置它的背景圖片(使用牆紙或東西)
- 面板添加到窗體,並設置它的背景爲透明(它使用DrawThemeParentBackground要做到這一點!)
- 將您的透明PNG添加到面板中... PNG將與背景融合在一起。
現在,由於GDI缺乏UI開發人員所需的許多功能,他們都轉移到了WPF,這是一個完全不同的野獸,但會做你正在問的問題,沒有太大麻煩!
我對你確切的問題有點困惑。您是否遇到透明度問題(如果是這樣,請閱讀GDI和GDI +中的透明度)......您是否創建了自己的控件以充當按鈕?該按鈕是否找不到您正在查找的資源或其他資源? – series0ne
另外,「擴散網頁內容」是什麼意思? – series0ne
我必須放下一個帶透明區域的PNG圖像,這個透明區域可以充當按鈕。在我發現的代碼中,人們說我們可以通過創建一個「自定義」控件來獲得這個結果。 –