簡體   English   中英

C# 透明面板?

[英]C# Transparent Panels?

所以我通過使用 GDI 制作游戲引擎來挑戰自己。

到目前為止,我已經設法使用 GDI 制作了一些游戲 - 但是我最近遇到了一個問題,我需要一些幫助。

我已經實現了一個 UI 系統,並發現 GDI Translate功能移動整個畫布。 隨后,我的所有鼠標坐標都發生了偏移,導致我的 UI 系統無法按預期工作。

問題:有沒有辦法讓Panel 在Paint 方法上透明?

我試圖將清晰的顏色設置為透明,但這只會使面板變黑。

我無法指出這方面的來源,但我現在做了一些測試,我的解釋如下:

當我將面板的背景顏色設置為 Colors.FromArgb(50,0,0,0) 時,這會起作用,因為每當我更改表單的背景顏色時,面板就會繼續存在,然后表單的顏色就會透過面板。

但是:位於此面板后面的其他控件並非一直可見。 我確信出於性能原因,控件的呈現僅在用戶可見時才會發生,這意味着它們不會被其他控件覆蓋。 所以窗體的顏色是透明的,因為透明顏色實際上是有效的,但是面板后面的控件沒有被渲染,因為它們被其他控件覆蓋。

您必須編寫自己的控件:

  public class TransparentPanel : Panel
  {
    protected override CreateParams CreateParams
    {
      get
      {
        var cp = base.CreateParams;
        cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT
        return cp;
      }
    }
  }

這告訴窗口,該控件是透明的,並且在該控件后面按 z 順序排列的控件也必須呈現。

暫無
暫無

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

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