【问题标题】:Making main window transparent使主窗口透明
【发布时间】:2015-08-15 14:40:52
【问题描述】:

我想要做的是强制主框架窗口背景颜色完全透明。

到目前为止,我发现的唯一第一种方法是SetTransparent(wxByte alpha)function。但是,这似乎也在为子控件设置透明度 - 我不希望这样。

我一直在尝试多种方法来实现这一目标,但都没有奏效。此外,有关此的大多数问题似乎都已过时。是否有任何工作方法(适用于 Windows)可以让我为主框架窗口设置完全透明度?

【问题讨论】:

  • 如果您能告诉我们更多关于您所尝试的内容可能会有所帮助。例如,你对SetLayeredWindowAttribute做了什么(如果有的话)?
  • @JerryCoffin 老实说,我已经尝试了在 Google 结果中找到的所有内容。 wxWidgets 文档非常庞大,因此我需要仔细阅读所有内容。但是,我从未尝试过SetLayeredWindowAttribute 方法,您能详细介绍一下吗?

标签: c++ windows c++11 transparency wxwidgets


【解决方案1】:

@Jerry Coffin 为我指明了正确的方向,我为此制定了一个工作解决方案。但是我仍然认为混合 WinAPI 和 wxWidgets 并不是最好的主意。但是,它确实有效。

wxColour transparentColor = wxColour(wxTransparentColour);

SetBackgroundColour(transparentColor);
SetBackgroundStyle(wxBG_STYLE_CUSTOM);

SetWindowLong(GetHandle(), GWL_EXSTYLE, GetWindowLong(GetHandle(), GWL_EXSTYLE) | WS_EX_LAYERED);
SetLayeredWindowAttributes(GetHandle(), transparentColor.GetRGB(), 255, LWA_ALPHA);
SetLayeredWindowAttributes(GetHandle(), transparentColor.GetRGB(), 255, LWA_COLORKEY);

【讨论】:

  • 奇怪,这段代码似乎没有多大意义。您将 alpha 设置为完全不透明,但您却以某种方式获得了透明窗口?通常我希望SetTransparent(0),这相当于SetLayeredWindowAttributes(..., 0, LWA_ALPHA) 这样做......
  • @VZ。是的,这有点奇怪,但它有效。 SetTransparent(0) 只会使整个应用程序透明(主窗口 + 它的所有子窗口)。我花了 2 个小时在上面,这是我找到的唯一可行的解​​决方案。
猜你喜欢
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2019-04-24
  • 1970-01-01
  • 2018-04-23
  • 2013-02-21
  • 2012-08-04
  • 1970-01-01
相关资源
最近更新 更多