透明控制放置图片框

时间:2011-08-19 18:30:32

标签: c# winforms user-controls picturebox

我有一个PNG文件,在我的winform上的图片框中显示十字准线。我创建了一个用户控件,其中包含另一个小图片框(绿点)和标签。

我想要做的是将用户控件放在图片框上,以便只显示点和标签。并且控件的方形边缘是不可见的。

点有白色边缘,因为png实际上是方形的,所以我试图将透明度键设置为白色,但是当我将控件添加到我的图片框时,所有白色都是透明的。

我认为如果我用一个颜色在我的点边缘着色,那么我可以将它与透明度键匹配,但颜色必须精确(对吗?),我唯一的绘画方法是在windows中油漆,所以我不知道是否匹配颜色。有什么帮助吗?

1 个答案:

答案 0 :(得分:0)

您遇到的问题是WinForms控件不支持真正的透明度,让他们这样做可能有点棘手。他们所做的是在自己下面绘制子控件(当通过SetStyle启用透明度时),但这有其自身的怪癖。你应该先尝试这样的事情:

// in your custom control class...
protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT

        return cp;
    }
} 

我发现这种方法比以下方法更可靠,但你也应该尝试这个:

public MyTransparentControl()
{
    SetStyle( ControlStyles.SupportsTransparentBackColor |     
              ControlStyles.AllPaintingInWmPaint |
              ControlStyles.UserPaint, true );

    BackColor = Color.Transparent;
}

作为替代方法,您是否考虑过使用WPF而不是WinForms?我知道这并不总是一个选项,但如果它是你将使你的生活变得更容易,因为WPF控制支持透明度和开箱即用控制分层。