问题描述
小弟有一个程序,是在一个Panel上将摄像机的图像显示出来。现在启动时是没有图像的,Panel的底色为黑色,同时在Panel上加载一个工具条,类似播放器的那种。现在本人使用的是UserControl,加载成功后工具条透明,可以看到上面的按钮。但是摄像机图像点播成功后,工具条就有了黑色背景。如何在图像点播成功后工具条仍然为透明色?
解决方案
解决方案二:
你把工具条所在的容器和摄像机显示图像所在的容器分开试试让第二个容器放在第一个里面
解决方案三:
引用1楼andy1020tc的回复:
你把工具条所在的容器和摄像机显示图像所在的容器分开试试让第二个容器放在第一个里面
要是能将2者分离也不会出现这种问题啊。我现在因为有很多Panel需要点播的,对图像点播的就有工具条,没有点播就没有。跟播放器的工具条比较类似啊
解决方案四:
用jquery试试吧,好像有这样的范例
解决方案五:
引用3楼ordimega的回复:
用jquery试试吧,好像有这样的范例
winForm可以用JQuery吗?
解决方案六:
.NET中的透明不是真正的透明实际上是自动把控件所在容器的前景色修改成了控件的背景色。所以如果容器背景色变了后,控件看上去就不透明了。
解决方案七:
引用5楼niaoked的回复:
.NET中的透明不是真正的透明实际上是自动把控件所在容器的前景色修改成了控件的背景色。所以如果容器背景色变了后,控件看上去就不透明了。
那么如何在容器背景色变了后,控件看上去依然透明呢?背景会实时变化
解决方案八:
control1.BackColor=Color.FromArgb(透明度-int,255,255,255);MSDN:
解决方案九:
引用7楼mking0412的回复:
control1.BackColor=Color.FromArgb(透明度-int,255,255,255);MSDN:http://msdn.microsoft.com/zh-cn/library/at1k42eh.aspx
经过试验还是不行呢?请问还有什么方法啊
解决方案十:
引用6楼wz5615的回复:
引用5楼niaoked的回复:.NET中的透明不是真正的透明实际上是自动把控件所在容器的前景色修改成了控件的背景色。所以如果容器背景色变了后,控件看上去就不透明了。那么如何在容器背景色变了后,控件看上去依然透明呢?背景会实时变化
背景变化的时候需要刷新吧。或者背景每变化一次你就在事件里重新设置一下透明(透明总是相对的)。
解决方案十一:
你可以参考"酷我"播放器,它是N个层窗体叠加的,同时使用了"不能被前置"的窗体扩展样式.关键字:UpdateLayeredWindow
解决方案十二:
引用9楼mking0412的回复:
引用6楼wz5615的回复:引用5楼niaoked的回复:.NET中的透明不是真正的透明实际上是自动把控件所在容器的前景色修改成了控件的背景色。所以如果容器背景色变了后,控件看上去就不透明了。那么如何在容器背景色变了后,控件看上去依然透明呢?背景会实时变化背景变化的时候需要刷新吧。或者背景每变化一次你就在事件里重新设置一下透明(透明总是相……
不是吧,我点播的即时刷新的啊,怎么能一直不停的刷新透明呢
解决方案十三:
引用10楼dylike的回复:
你可以参考"酷我"播放器,它是N个层窗体叠加的,同时使用了"不能被前置"的窗体扩展样式.关键字:UpdateLayeredWindow
这个实在创建的时候用吗?背景一直在即时刷新,会不会背景残留
解决方案十四:
不会残留,因为层窗体不属于那个播放画面所在的窗体,是独立的。
解决方案十五:
NET中的透明不是真正的透明实际上是自动把控件所在容器的前景色修改成了控件的背景色。所以如果容器背景色变了后,控件看上去就不透明了。
解决方案:
引用6楼wz5615的回复:
引用5楼niaoked的回复:.NET中的透明不是真正的透明实际上是自动把控件所在容器的前景色修改成了控件的背景色。所以如果容器背景色变了后,控件看上去就不透明了。那么如何在容器背景色变了后,控件看上去依然透明呢?背景会实时变化
没得其它办法,只有自己用GDI+画一个进度条
解决方案:
下面是System.Windows.Control的绘制透明色的源代码,你可以参考一下:internalvoidPaintTransparentBackground(PaintEventArgse,Rectanglerectangle,System.Drawing.RegiontransparentRegion){Graphicsg=e.Graphics;ControlparentInternal=this.ParentInternal;if(parentInternal!=null){if(Application.RenderWithVisualStyles&&parentInternal.RenderTransparencyWithVisualStyles){System.Drawing.Drawing2D.GraphicsStategstate=null;if(transparentRegion!=null){gstate=g.Save();}try{if(transparentRegion!=null){g.Clip=transparentRegion;}ButtonRenderer.DrawParentBackground(g,rectangle,this);return;}finally{if(gstate!=null){g.Restore(gstate);}}}Rectanglebounds=newRectangle(-this.Left,-this.Top,parentInternal.Width,parentInternal.Height);RectangleclipRect=newRectangle(rectangle.Left+this.Left,rectangle.Top+this.Top,rectangle.Width,rectangle.Height);HandleRefhDC=newHandleRef(this,g.GetHdc());try{using(WindowsFormsUtils.DCMappingmapping=newWindowsFormsUtils.DCMapping(hDC,bounds)){using(PaintEventArgsargs=newPaintEventArgs(mapping.Graphics,clipRect)){if(transparentRegion!=null){args.Graphics.Clip=transparentRegion;args.Graphics.TranslateClip(-bounds.X,-bounds.Y);}try{this.InvokePaintBackground(parentInternal,args);this.InvokePaint(parentInternal,args);}finally{if(transparentRegion!=null){args.Graphics.TranslateClip(bounds.X,bounds.Y);}}}}}finally{g.ReleaseHdcInternal(hDC.Handle);}}else{g.FillRectangle(SystemBrushes.Control,rectangle);}}