日期:2014-05-18  浏览次数:20854 次

怎样制作透明控件??
现在需要一个240*320大小的控件,它应该是透明的,然后不管挪到哪都能显示这个透明控件后面的图像,然后我需要读这个240*320大小的控件上图像的RGB信息。

就是不知道怎么能弄出来透明的控件。。。

------解决方案--------------------
namespace WindowsFormsApplication7
{
public partial class UserControl1 : UserControl
{
public UserControl1()
{
InitializeComponent();
SetStyle(ControlStyles.SupportsTransparentBackColor
| ControlStyles.UserPaint
| ControlStyles.AllPaintingInWmPaint
| ControlStyles.Opaque, true);
this.BackColor = Color.Transparent;

}
private Image img;
public Image Image
{
get
{
return img;
}
set
{
img = value;
}
}

protected override void OnLocationChanged(EventArgs e)
{
//base.OnLocationChanged(e);
Visible = false;
Visible = true;
}

protected override CreateParams CreateParams
{
get
{
//return base.CreateParams;
CreateParams cp = base.CreateParams;
cp.ExStyle |= 0x00000020; //WS_EX_TRANSPARENT 
return cp;
}
}
protected override void OnPaint(PaintEventArgs pe)
{
if (img != null)
{
base.OnPaint(pe);
pe.Graphics.DrawImage(img, 0, 0);
}
else
{

}
}

}
}
自定义控件 ~~搞定!
------解决方案--------------------
自定义控件

private void Form1_Load(object sender, EventArgs e)
{
Rectangle r1 = new Rectangle(0, 0, this.Width, this.Height);
Rectangle r2 = new Rectangle(100, 100, 200, 200);
Region r = new Region(r1);
r.Xor(r2);
this.Region = r;
}
http://www.codeproject.com/KB/buttons/EasyTransparentBut.aspx
------解决方案--------------------
看图的需求,我觉得你应该使用GDI+的CopyFromScreen
Using G as graphics=graphics.fromimage(panel1.backgroundimage)
G.copyfromscreen(.......
------解决方案--------------------
该用alpha透明,RGB全透明会穿透,也就是 会点到后面的窗口去。