windows – 设置透明背景Win32

前端之家收集整理的这篇文章主要介绍了windows – 设置透明背景Win32前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想要做的很简单,但似乎没有很多信息.基本上我有一个普通的非透明父窗口,我想在父窗口中放置一个子窗口(它有自己的非透明控件).因此,我唯一要做的就是将子窗口的背景画笔设置为透明,但它仍然会绘制白色背景.尝试使用WS_EX_LAYERED样式和SetLayeredWindowAttributes,但它使子窗口不可见.
Windows上实现“透明”子控件有​​两种基本方法

>在父窗口中处理WM_CTLCOLORxxx消息.
这是使现有控件支持透明度的便捷方式.每个控件将发送适合于控件类型的WM_CTLCOLORxxx消息.如果创建一个表示对话框背景外观的画笔,并从每条消息中返回该画笔,则净效果就像每个控件都涂有透明外部区域一样.
但是,如果您想要Alpha效果,或者控件在物理上相互重叠,则会失败.
>在父窗口中使用WS_EX_COMPOSITED.
没有这种风格,窗口管理器绘制子窗口的顺序是未定义的,在实践中,它从上到下.当尝试alpha混合重叠控件时,结果将是……令人不快. WS_EX_COMPOSITED将确保子窗口从下到上绘制.确保您不要使用WS_CLIPCHILDREN或WS_CLIPSIBLINGS样式,因为这样可以防止重叠区域被绘制.

您仍然需要通过WM_CTLCOLORxxx消息做一些聪明的事情,因为标准控件仍然会尝试使用dialog-background-grey填充整个rect.

猜你在找的Windows相关文章