我一直在尝试显示具有透明边框的图像作为控件的背景。
不幸的是,透明区域在父窗体中创建了一个洞,如下所示:
在上图中,表单有一个红色背景,我希望在透明区域的控件后面看到它。
我使用的代码如下:
protected override void OnPaint(System.Windows.Forms.PaintEventArgs e)
{
if (this.Image != null)
{
Graphics g = Graphics.FromImage(this.Image);
ImageAttributes attr = new ImageAttributes();
//set the transparency based on the top left pixel
attr.SetColorKey((this.Image as Bitmap).GetPixel(0, 0), (this.Image as Bitmap).GetPixel(0, 0));
//draw the image using the image attributes.
Rectangle dstRect = new Rectangle(0, 0, this.Image.Width, this.Image.Height);
e.Graphics.DrawImage(this.Image, dstRect, 0, 0, this.Image.Width, this.Image.Height,
GraphicsUnit.Pixel, attr);
}
else
{
base.OnPaint(e);
}
}
protected override void OnPaintBackground(System.Windows.Forms.PaintEventArgs e)
{
//base.OnPaintBackground(e);
}
这个类是从 PictureBox 继承的,因为我需要一个实现 OnMouseMove 和 OnMouseUp 事件的控件。
我一天中的大部分时间都在研究,但没有成功测试出不同的想法,但不幸的是,大多数人只在完整的框架上工作,而不是在 .Net CF 上工作。
任何想法将不胜感激。