首先使用透明之前必须设置该窗口为层级窗口,即增加窗口的扩展风格WS_EX_LAYERED,增加的时候最好使用GetWindowlong获取Ex风格,然后加入后在SetWindowLong设置,最好不适用ModifyStyle增加(有时候不好使,我用vs10可以,但08却不行)。
UpdateLayeredWindow使用之后不会再发出WM_PAINT绘制消息,所有的绘制消息都由UpdateLayeredWindow代而处理,所以不要再OnPaint里做任何事,因为是徒劳的(可能在调用Update..之前有用)。
UpdateLayeredWindow是用兼容的dc去更新当前窗口的dc,所有必须要在兼容的dc上绘制好后去更新当前窗口,故而所有操作应该绘制到兼容的dc上,然后用兼容dc去调用UpdateLayeredWindow去透明更新。
UpdateLayeredWindow最后的参数表明透明的方式,第一种是ULW_ALPHA说明是使用图片本身的Alpha通道去透明(鼠标穿透)当前窗口(如果是最新的bmp格式,支持alpha通道,但必须是32四子节的,否则为3字节即24bit,如果使用4字节,最后字节为alpha通道,该通道决定透明度,如果非得填写24bit即3字节,那么默认的一个alpha通道0,也就是说透明度为0是看不见的,切记!!),如果是这样那么BLENDFUNCTION中的SourceConstantAlpha“源常量透明alpha”是没有用的,如果是用ULW_COLORKEY则说明用颜色掩码去透明窗口,也就是说兼容dc中所绘制的画布中如果颜色与掩码色相同则把这部分透明掉(要在兼容dc中绘制透明色&#
UpdateLayeredWindow与SetLayeredWindowAttributes
最新推荐文章于 2023-10-18 15:27:20 发布