首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

【C#界面】完善实现无毛边异形窗体

2013-03-17 
【C#界面】完美实现无毛边异形窗体实现效果图2:实现效果图3:异形窗体的实现思路(一)、采用UpdateLayeredWindo

【C#界面】完美实现无毛边异形窗体

实现效果图2:
【C#界面】完善实现无毛边异形窗体
实现效果图3:
【C#界面】完善实现无毛边异形窗体

异形窗体的实现思路

(一)、采用UpdateLayeredWindow这个api函数基于Png图alpha通道绘制异形窗口
           优点:真正意义上的异形窗口
           缺点:用了WS_EX_LAYERED后当前窗体不处理paint事件,所以窗体上无法绘制控件,但这个控件确存在,而且可以响应事件

           解决无法绘制控件方法:
    
              1、思路:
     
              采用双层窗口:底层背景窗口层与顶层控件层,用控件层Show()背景层,同时处理窗体的窗口移动事件,让另外一个窗体同步移动或者做其它事情。
        
              2、实现:         

              底层背景层:采用UpdateLayeredWindow这个api函数基于带Alpha通道的Png图绘制 
              顶层控件层:
                  方法一:采用无边框窗口,把窗口背景颜色BackColor设置一个不常用颜色例如:ff00ff颜色,且把窗口TransparencyKey颜色属性设跟背景色BackColor一样(意义:去除带背景色的区域从而显示后面背景层)
                  方法二:采用无边框窗口,把窗口背景设为背景层对应位置的位图,给人一种透明的效果,但是编辑会有所限制。(SkinWhetherTank属性可以切换这两种透明模式)

              优点:可以解决显示控件的问题,不影响控件的使用
              缺点:方法一会让部分控件有毛边,方法二会让窗体编辑受限制。(缺点有待解决,望高手指点)

              属性:
              GradientTime:控件层渐变特效时长(越小越快)。
              MainPosition:窗口在绘图层位置。
              SkinBack:设置或获取绘图层窗口背景。
              SkinMobile:窗体是否可以移动。
              SkinOpacity:设置或获取绘图层窗口透明度(0-255)。
              SkinShowInTaskbar:

绘图层是否出现在Windows任务栏中。
              SkinSize:设置或获取绘图层窗口大小。
              SkinTrankColor:绘图层需要透明的颜色。
              SkinWhetherTank:绘图层是否开启位图仿透明  注意(SkinOpacity < 255时,此属性为False可达到背景透明,控件不透明的效果。)。

              源码共享:
              源码上传中
[解决办法]
不错,期待lz的源码
[解决办法]
如果用api的话,是否适用于每一个WINDOWS系统?
[解决办法]
【C#界面】完善实现无毛边异形窗体
[解决办法]
围观欣赏下【C#界面】完善实现无毛边异形窗体
[解决办法]
【C#界面】完善实现无毛边异形窗体
[解决办法]
效果不错,支持一下
[解决办法]
源码上传中......
[解决办法]
【C#界面】完善实现无毛边异形窗体
[解决办法]
这个无毛边最吸引我,感谢楼主分享!
[解决办法]
好的  好东西啊
[解决办法]
看一看,源码oooo
[解决办法]
感谢楼主分享,精彩
[解决办法]
【C#界面】完善实现无毛边异形窗体
[解决办法]
来过就一定留名!
[解决办法]
楼主原来是分享。顶一下
[解决办法]
设置窗口透明就OK了
直接使用透明函数就可以
没必要获取出窗口-20信息样式区
再以 位或524288 位运算结果
然后再使用GDI手绘
直接透明在简写一定的代码可能要更精简...更容易看懂

[解决办法]
小看了一下LZ所列API函数
我貌似觉得LZ函数用错了吧
UpdateLayeredWindow
刷新窗口函数==是刷新还是重画
我都忘了...我想不是吧
CIDE不支持 PNG 除非特殊调用函数才行


[解决办法]
我可以很肯定,这种透明在很多的地方会失效,在视频上透明,很大几率会闪烁
[解决办法]
【C#界面】完善实现无毛边异形窗体
[解决办法]
mark.,
[解决办法]
谢谢楼主分享,支持下   
[解决办法]
十分好用 感谢
[解决办法]
还是两个方法啊,博客园,很早就有了

用UpdateLayeredWindow,最大的缺点就是控件失效。如果控件较多,然后区域判断,这可烦这呢。
还是用WPF搞,简单点
[解决办法]
刚刚试了下  完美解决我的问题,但是有个设置需要提一下
1、MainPositionde 的值不能为0,0
2、Size值x=图片宽-MainPositionde X  y=长-Y
3、SkinSize值为图片大小
[解决办法]
不错,办法是动手想出来的,大家也加油。
[解决办法]



A lovely goldfish desktop pet(using alpha-PNG and GDI+)
by David Wu
[解决办法]
【C#界面】完善实现无毛边异形窗体我感觉 无论是 绘制控件 还是 双层窗体 都蛋疼
如果是双层窗体 而我窗体上本身的控件又带有alpha通道 那就悲催了 比如用一自定义的按钮控件的时候 鼠标放上去按钮周围发光  所以还是绘制比较好点  但是 绘制也蛋疼、、、
[解决办法]
效果不错,支持一下 
[解决办法]
本来打算下载下来把我的想法给你演示一下的  重点是  你这样搞话说 用不了 半透明图片做窗体啊....出来的窗体本该半透明 投过去显示桌面的  但是实际却是混合的窗体的背景色、、、
[解决办法]
问一句哈 能画出椭圆形窗口吗

热点排行