首先,我正在使用C ++开发Win32。
我一直在尝试实现一个带有子窗口的透明窗口,该窗口应保持100%不透明。似乎子控件不能比父级更好(更低),如果我让我的父级100%透明,那么我的子控件也会继承透明度。
我使用的代码 -
SetLayeredWindowAttributes(GetParent(parentWindowHwnd), 0, 0, LWA_COLORKEY, LWA_ALPHA);
有任何帮助吗?
如果我对问题不是很清楚,请回复。
答案 0 :(得分:4)
不幸的是,你不能这样做,子窗口总是与父窗口具有相同的不透明度。 Google桌面工具栏有一个巧妙的技巧,可以在半透明背景上呈现不透明文本框的错觉。他们创建了两个顶级窗口,一个是背景窗口,一个是文本框。然后他们将背景窗口设置为texbox的所有者(而不是父)。然后他们将背景设置为透明。要做到这一点是相当多的工作,但这是唯一的方法,不使用UpdateLayeredWindow自己呈现整个事物。
答案 1 :(得分:1)
我确信你可以反过来做,即带有透明子窗口的不透明主窗口,所以反过来也可能是这样。您是否尝试取消设置 子窗口的WS_EX_LAYERED
标志,然后重新绘制它以使其再次完全不透明?
// Remove WS_EX_LAYERED from the window styles
SetWindowLong(hChildWnd,
GWL_EXSTYLE,
GetWindowLong(hChildWnd, GWL_EXSTYLE) & ~WS_EX_LAYERED);
RedrawWindow(hChildWnd,
NULL,
NULL,
RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);
Layered Windows上的MSDN页面也可以提供帮助。
答案 2 :(得分:0)
您不能使子控件的透明度低于其父控件。这里通常的做法是给你的窗口一个不规则的形状:不是一个矩形。这比alpha透明度要老得多 - 想想时钟应用程序:如果你愿意,你可以让你的窗口循环,甚至在Windows 95上。
这可以使用Windows API函数SetWindowRgn
完成:
一个简单的(vb)example
Google results