如何使用不透明的子控件(或子窗口)创build透明窗口?

首先,我正在用C ++编写Win32。

我一直在试图实现一个透明窗口应该保持100%不透明的子窗口。 看来,子控件不能有更好的透明度(低于),如果我让我的父母100%透明,那么我的子控件也inheritance透明度。

我使用的代码 –

SetLayeredWindowAttributes(GetParent(parentWindowHwnd), 0, 0, LWA_COLORKEY, LWA_ALPHA); 

任何帮助?

如果我对我的问题不太清楚,也请回复。

Solutions Collecting From Web of "如何使用不透明的子控件(或子窗口)创build透明窗口?"

不幸的是,孩子的窗户总是和他们的父母一样不透明。 Google桌面工具栏有一个巧妙的技巧,让半透明的背景上的不透明的文本框的幻觉。 他们创建了两个顶级窗口,一个是背景,一个是文本框。 然后他们将背景窗口设置为texbox的所有者(不是父类 )。 然后他们将背景设置为透明。 获得正确的结果是相当多的工作,但这是唯一的方法,而不必使用UpdateLayeredWindow来渲染整个事物。

我敢肯定,你可以做到这一点,即一个透明的子窗口不透明的主窗口,所以相反也可能是真实的。 您是否尝试过为窗口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); 

分层Windows上的MSDN页面也可能有帮助。

你不能让一个孩子的控制比它的父母更不透明。 这里通常的做法是给你的窗口不规则的形状:不是一个矩形。 这比Alpha透明度要老得多 – 想想一个时钟应用程序:即使在Windows 95上,也可以让窗口循环。
这可以使用Windows API函数SetWindowRgn
一个简单的(vb) 谷歌结果的 例子