DuiLib Layered Window 透明属性 使用方法

DuiLib Layered Window使用方法

 

透明属性的添加:

通过在CreateWindowEx的时候加上WS_EX_LAYERED,或者通过使用SetWindowLong函数将WS_EX_LAYERED加上,就代表该窗口是透明窗口了,设置了这个属性后,如果开发者什么事情都不做的话,窗口是绘制不出来的,因为Windows是不会发WM_PAINT消息给窗口的。

关于透明窗口的绘制,微软提供了两种方案:

一种是让开发者手动调用UpdateLayeredWindow函数,由于系统不会主动发WM_PAINT消息过来,所以开发者需要在任何窗口需要重绘的地方调用这个函数,比如窗口大小改变,窗口内容改变,都需要调用这个函数。此外这种绘制方式比较灵活,开发者可以在绘制的时候控制每一个像素点的透明度。

另外一种是用户通过SetLayeredWindowAttributes函数设置一个整体的透明度给窗口,在这种情况下,用户不需要调用UpdateLayeredWindow函数去绘制窗口,并且当窗口需要重绘的时候Windows会发WM_PAINT消息给窗口,Windows会接管窗口透明度的绘制,开发者只需要按照非透明窗口的方式去响应WM_PAINT消息即可。此外开发者切不可在WM_PAINT消息里面使用UpdateLayeredWindow函数来绘制窗口,这样窗口是绘制不出来的。这种方式不是很灵活,开发者只能控制整个窗口或者窗口里某种颜色的透明度。

DuiLib Layered Window的实现方式:

(1)如果xml的标签里面指定bktrans=“true”,即代表该DuiLib窗口是Layered Window,DuiLib内部给窗口添加WS_EX_LAYERED属性,并且使用第一种绘制方案绘制透明窗口,DuiLib通过InvalidateRect函数让Windows给窗口发送WM_PAINT消息,然后我们会在WM_PAINT消息里面判断是否设置bktrans属性,如果设置了就

你可能感兴趣的:(VC++)