最近一直都在找合适而简单的方法想要实现透明窗体的效果。
也看了UpdateLayerWindow 方法,但是会导致窗体不能很多事件,除了 Paint事件,还有其他的一些事件也无法响应
今天,看到了下面链接中的内容:
http://topic.csdn.net/u/20110221/14/c9450f23-3fe2-4369-82e1-ce620ef63610_2.html
根据上面链接中,这篇帖子的灵感
方式一:
想到可以这样实现透明窗体:
1.在窗体显示之前对桌面进行截图,
2.在重绘时候先绘制窗体所在位置的桌面的 那个Rectangle的部分。
3.窗体移动时,也是先绘制2, 窗体还原(最小化)之前还是对桌面进行截图,窗体被程序覆盖了(再次得到焦点时)还原之前的桌面背景。
分析弊端:
这种方式比较复杂,尤其是对桌面进行截图,可能会涉及到多张桌面图片,难以管理,并且需要分析各种可能性,以避免窗体因意外情况无法更新而导致显示不出来的情况。
比较耗费资源。CPU,内存。
方式二:
直接 获取桌面的背景,而后遍历所有窗体句柄(除了自己的),然后获取句柄的DC,然后,把这些窗体根据其位置,逐个画到,我们窗体需要的背景里面。
分析弊端:
比较耗费资源。CPU,内存。
以上两种方式有一个好处就是,不需要用两个窗体,说实话我觉得用两个窗体实现,真是感觉非常不伦不类的。
两种方法,都可以尝试,不过到底行不行还得以后有没有时间验证一下实际 情况。
另外继续探索其他方式实现透明窗体。