C#透明面板?

时间:2018-10-25 05:10:31

标签: c# winforms gdi+

所以我要通过使用GDI制作游戏引擎来挑战自己。

到目前为止,我已经设法使用GDI制作了一些游戏-但是最近遇到了一个我需要帮助的问题。

我已经实现了一个UI系统,并且发现GDI Translate函数可以移动 entire 画布。随后,我所有的鼠标坐标都偏移了,导致我的UI系统无法按预期工作。

问题:有什么方法可以使Paint在Paint方法上透明?

我尝试将透明颜色设置为透明,但这只会使面板变黑。

1 个答案:

答案 0 :(得分:0)

我不能为此指出一个来源,但是我现在做了一些测试,我的解释如下:

当我将面板的BackgroundColor设置为Colors.FromArgb(50,0,0,0)时,此方法就起作用了,因为每当我更改面板的Backgroundcolor时,面板的颜色就会一直亮着面板。

但是:位于该面板后面的其他控件并非一直可见。我确信出于性能原因,仅当控件对用户可见时才进行控件的呈现,这意味着它们不会被其他控件覆盖。因此,表单的颜色会发光,因为透明的颜色实际上是有效的,但是面板后面的控件却未被渲染,因为它们被另一个控件覆盖。

您必须编写自己的控件:

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

这告诉窗口,该控件是透明的,并且还必须呈现此控件后面z顺序的控件。