C++:如何仅在父窗口上使用 SetLayeredWindowAttributes()? [复制]
Posted
技术标签:
【中文标题】C++:如何仅在父窗口上使用 SetLayeredWindowAttributes()? [复制]【英文标题】:C++: How do I use SetLayeredWindowAttributes() only on a parent window? [duplicate] 【发布时间】:2012-10-25 14:26:38 【问题描述】:可能重复:Transparent window containing opaque text and buttons
我正在尝试使用 C++ 操作现有窗口。
基本上,我要做的是通过首先将其窗口样式设置为WS_EX_LAYERED
,然后使用具有正确值的SetLayeredWindowAttributes()
,将父窗口设置为透明。
问题在于,这会将子窗口也设置为透明,这将使整个程序透明(显然是个问题)。
有什么想法吗?
EDIT 展示问题的图片:
如您所见,我将任务栏窗口样式设置为WS_EX_LAYERED
,但例如窗口MSTaskSwWClass
(具有正在运行的应用程序图标的窗口)也会受到影响。
EDIT2尝试UpdateLayeredWindow()
,结果完全相同。
【问题讨论】:
即使问题非常相似,我认为答案也不会相同。首先,我没有自己创建窗口,其次我没有使用任何位图或 GDI(+)。另外,我尝试使用 UpdateLayeredWindow(),但它没有改变任何东西(可能是因为我不明白如何使用它..) 您要求的不透明度和透明效果也将始终应用于任何子窗口。避免这种情况的唯一方法是在该父窗口之上放置一个***窗口。 ...在这种情况下我该怎么做..? 【参考方案1】:截至http://msdn.microsoft.com/en-us/library/windows/desktop/ms633540%28v=vs.85%29.aspx
Windows 8: ***窗口和子窗口支持 WS_EX_LAYERED 样式。 以前的 Windows 版本支持 WS_EX_LAYERED仅适用于***窗口。
因此它不会将分层属性设置为“子”窗口。
向我们展示屏幕截图和/或代码。
【讨论】:
添加了一张图片进行说明。以上是关于C++:如何仅在父窗口上使用 SetLayeredWindowAttributes()? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何仅在父组件完全挂载时挂载 vue js 子组件-我正在使用 $refs