【问题标题】:C++: How do I use SetLayeredWindowAttributes() only on a parent window? [duplicate]C++:如何仅在父窗口上使用 SetLayeredWindowAttributes()? [复制]
【发布时间】: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(),但它没有改变任何东西(可能是因为我不明白如何使用它..)
  • 您要求的不透明度和透明效果也将始终应用于任何子窗口。避免这种情况的唯一方法是在该父窗口之上放置一个顶级窗口。
  • ...在这种情况下我该怎么做..?

标签: c++ windows winapi


【解决方案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仅适用于顶级窗口。

因此它不会将分层属性设置为“子”窗口。

向我们展示屏幕截图和/或代码。

【讨论】:

  • 添加了一张图片进行说明。
猜你喜欢
  • 2013-08-25
  • 1970-01-01
  • 2010-10-05
  • 2017-11-09
  • 1970-01-01
  • 2015-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多