由于种种需求我们需要做透明或半透明的窗体,但很难找到合适的方法:
1.设置窗体属性Opacity的值来改变透明度,可是窗体上面的控件透明度也随之。可以转换个思路设置双层窗体来实现,背景层用Opacity属性设置透明度,前景层设置为不透明。然后控制两个窗体大小比例位置联动,这样也算实现了,其实现方法最容易,就不写代码了。注:在CE下并没有此属性
2.把属性TransparencyKey 的属性设置为窗体的背景色,窗体就变成全透明,此方法并不影响控件颜色,全透明处能点到后面的窗体,这种方法适合做异形窗体。在把窗体的背景图设置为PNG图片,也可看做透明窗体。设置设置属性就可实现,代码略。并注:在CE下并没有此属性
3. 用系统API SetWindowLong、GetWindowLong、SetLayeredWindowAttributes实现透明窗体,但实现完之后发现与第一种效果一样。
4. 用系统API AlphaBlend实现半透明 注:很奇怪明明msdn上声称CE5.0以上支持AlphaBlend,但我在5.0上运行时提示此API不被支持,不知道什么原因?
对了,必须重写form窗体OnPaintBackground方法
5.全用API实现4
当然也免不了重写OnPaintBackground。
这几种方法中,设置 TransparencyKey和重写OnPaintBackground都是使窗体完全透明,但不同之处是:前者不但窗体透明,而且消息也“透明”了,后者则不然,只是颜色透明,是无法点击到后面的窗体的。
这几种方法相互配合一下,应该会有意想不到的效果吧,有时间再弄弄O(∩_∩)O~
注:这里的this都是特指窗体对象