日期:2014-05-17  浏览次数:21119 次

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));