码迷,mamicode.com
首页 > Windows程序 > 详细

DUI-分层窗口两种模式(SetLayeredWindowAttributes和UpdateLayeredWindow两种方法各有利弊)

时间:2017-01-11 07:51:58      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:box   etl   har   win   div   修改   实现   另一个   鼠标消息   

LayeredWindow提供两种模式:

1.使用SetLayeredWindowAttributes去设置透明度, 完成窗口的统一透明,此时窗口仍然收到PAINT消息, 其他应用跟普通窗口一样.

2.使用UpdateLayeredWindow方法, 向系统提交包含bitmap的DC, 交由系统统一管理,此时再也收不到paint消息, 任何对窗口的改变,只能通过UpdateLayeredWindow来修改.

如果你不需要针对像素级别的不同透明,只需要使用SetLayeredWindowAttributes模式即可,用法与普通窗口用法一样,有一点不同,系统会缓存窗口的bitmap,所以当窗口上面的其他窗口被移开时,这是系统会去自己绘制,不会发送paint消息。使用这种模式的好处时,你基本不用改变你使用窗口的方法,你收到paint消息后,绘制的图像会被系统重定向到另一个函数里面,进行组合,从而得出透明效果。

如果你需要达到针对像素级别的不同透明,或者你想更加直接的去控制窗口的绘制,就必须使用UpdateLayeredWindow方法了,这个方法不重定向你的绘制结果,也不缓存窗口的bitmap,而是完全由你自己来绘制,这样在内存上来说,是更高效的。

 

1.一旦你调用了SetLayeredWindowAttributes,UpdateLayeredWindow的调用就会失败,你需要重新设置WS_EX_LAYERED,这是两种模式切换的关键。
2.WS_EX_LAYERED属性是不可以设置给子窗口
3.在完全透明的地方,鼠标的点击将会被穿过,另如果对窗口设置了WS_EX_TRANSPARENT属性,鼠标消息也会穿过

DM使用了以下方式来实现UpdateLayeredWindow窗口接收PAINT消息:

技术分享

DUI-分层窗口两种模式(SetLayeredWindowAttributes和UpdateLayeredWindow两种方法各有利弊)

标签:box   etl   har   win   div   修改   实现   另一个   鼠标消息   

原文地址:http://www.cnblogs.com/findumars/p/6271693.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!