Windows 如何使用非透明子控件(或子窗口)创建透明窗口? 首先,我正在用C++做Win32的工作。p>

Windows 如何使用非透明子控件(或子窗口)创建透明窗口? 首先,我正在用C++做Win32的工作。p>,windows,winapi,window,transparent,Windows,Winapi,Window,Transparent,我一直在尝试实现一个透明窗口和一个应该保持100%不透明的子窗口。似乎子控件的不透明度不能比父控件更好(更低),如果我使父控件100%透明,那么子控件也会继承透明度 我使用的代码- SetLayeredWindowAttributes(GetParent(parentWindowHwnd), 0, 0, LWA_COLORKEY, LWA_ALPHA); 有什么帮助吗 如果我对我的问题不是很清楚,也请回答 我确信你可以用另一种方式来做,即不透明的主窗口和透明的子窗口,因此反过来也可能是正确的

我一直在尝试实现一个透明窗口和一个应该保持100%不透明的子窗口。似乎子控件的不透明度不能比父控件更好(更低),如果我使父控件100%透明,那么子控件也会继承透明度

我使用的代码-

SetLayeredWindowAttributes(GetParent(parentWindowHwnd), 0, 0, LWA_COLORKEY, LWA_ALPHA); 
有什么帮助吗


如果我对我的问题不是很清楚,也请回答

我确信你可以用另一种方式来做,即不透明的主窗口和透明的子窗口,因此反过来也可能是正确的。您是否尝试过取消设置子窗口的
WS\u EX\u 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);

上的MSDN页面也可能会有所帮助。

您不能这样做。不幸的是,子窗口的不透明度始终与其父窗口相同。谷歌桌面工具栏有一个巧妙的技巧,在半透明的背景上给人一种不透明文本框的错觉。他们创建了两个顶级窗口,一个是背景窗口,另一个是文本框窗口。然后,他们将背景窗口设置为texbox的所有者(而不是父对象)。然后他们将背景设置为透明。这需要做大量的工作,但这是唯一一种不用自己使用UpdateLayeredWindow渲染整个内容的方法。

不能使子控件的透明度低于其父控件。通常的做法是给你的窗口一个不规则的形状:不是矩形。这比alpha transparency要古老得多——考虑一下时钟应用程序:如果您愿意,您可以使窗口呈圆形,即使在windows 95上也是如此。
可以使用Windows API函数
SetWindowRgn

一个简单的(vb)

快速问题:如何将背景窗口设置为texbox的所有者?只是为了更新,从Windows 8开始,这不再是事实。现在孩子们可以分层了。@ManojAwasthi:如果这不能解决你的问题,不要把它当作答案。是的。早年我还不太明白。谢谢