winform重载OnPaint用GDI画了一些图型,控件背景不透明了
winform上有一些PictureBox,原本是背景透明的。winform重载了OnPaint,在OnPaint中画了背景图,且用GDI画了一些图型后PictureBox就变不透明了。
分析了下原因,PictureBox背景透明时要获取父窗体的背景图片(BackGroundImage),这个背景图是父窗体OnPaint之前的背景。
目前还不知如何处理
------解决方案--------------------变通一下:可以给图片填充PictureBox容器的背景色。
------解决方案--------------------直接把pictureBox的图片画到窗体上面去!
------解决方案--------------------你自定义的时候不要忘记调用基类的OnPaint方法了
------解决方案--------------------透明控件:
class MyPictureBox:Control
{
protected override CreateParams CreateParams
{
get
{
CreateParams para = base.CreateParams;
para.ExStyle
------解决方案--------------------= 0x00000020; //WS_EX_TRANSPARENT 透明支持
return para;
}
}
protected override void OnPaintBackground(PaintEventArgs e) //不画背景
{
//base.OnPaintBackground(e);
}
protected override void OnPaint(PaintEventArgs e)
{
e.Graphics.DrawEllipse(System.Drawing.Pens.Aqua, new System.Drawing.Rectangle(100, 100, 100, 100));