代码之家  ›  专栏  ›  技术社区  ›  snicker

如何在Windows窗体中清除透明控件上的图形

  •  6
  • snicker  · 技术社区  · 15 年前

    所以,我对Windows窗体开发非常不熟悉。

    我正在尝试创建一个“嘿,我正忙着做事情”的组件,它只是旋转一个形状。我希望这个控件是暂时的,并在任何其他控件之上绘制。类直接从控件继承。

    所以我在构造器中有这个:

    SetStyle(ControlStyles.Opaque, true);
    

    而这:

    protected override CreateParams CreateParams
    {
        get
        {
            CreateParams parms = base.CreateParams;
            parms.ExStyle |= 0x20; 
            return parms;
        }
    }
    

    它使我得到一个将在其他控件之上绘制的控件。

    现在我的问题是这个。我每秒重画几次控件,使动画看起来很流畅。但是,我不知道如何清除前一帧中绘制的内容。使用 e.Graphics.Clear(Color.Transparent) 在里面 OnPaint 将整个控件变为黑色。

    是否有方法只清除控件的绘制内容?

    我注意到调整控件的大小将清除背景。

    不起作用的东西

    1. 重写paintbackground不做任何操作。或者只是调用base.onpaintbackground。同样的结果。
    2 回复  |  直到 15 年前
        1
  •  4
  •   snicker    15 年前

    好吧,我在这里找到了解决方案: http://www.bobpowell.net/transcontrols.htm

    为了保持透明的背景,父控件实际上必须失效。

        2
  •  2
  •   popester    15 年前

    您可能需要覆盖本文介绍的paintbackground: http://saftsack.fs.uni-bayreuth.de/~dun3/archives/creating-a-transparent-panel-in-net/108.html

    当需要清除控件以强制调用OnPaintBackground时,您可能还需要使其无效。