我想要做的很简单,但似乎没有很多信息.基本上我有一个普通的非透明父窗口,我想在父窗口中放置一个子窗口(它有自己的非透明控件).因此,我唯一要做的就是将子窗口的背景画笔设置为透明,但它仍然会绘制白色背景.尝试使用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.