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

仅在父状态更新后如何接收道具?

仅在父级时删除之前发布

仅在父片段中的操作栏中显示搜索视图

delphi如何实现像excel中那样,有多个窗口,窗口可以最大化。但是只能在父窗口移动

如何在父窗口中运行子窗口