C++ winapi-SetLayeredWindowAttributes with LWA_COLORKEY仅将像素设置为完全不透明或完全透明?

C++ winapi-SetLayeredWindowAttributes with LWA_COLORKEY仅将像素设置为完全不透明或完全透明?,c++,windows,winapi,C++,Windows,Winapi,我的边框是白色的(0xfffffffe)。我的框架内部是黑色的(0xff000000)。 我希望使边界半透明(alpha值为100),内部不透明。显然,我已经使用了SetLayeredWindowAttributes来实现这一点,但它不起作用 此变体:SetLayeredWindowAttributes(RGB(0xxff,0xff,0xfe),100,LWA_COLORKEY)将边框设置为100的alpha,但内部完全透明 此变体:SetLayeredWindowAttributes(RGB(

我的边框是白色的(0xfffffffe)。我的框架内部是黑色的(0xff000000)。 我希望使边界半透明(alpha值为100),内部不透明。显然,我已经使用了
SetLayeredWindowAttributes
来实现这一点,但它不起作用

此变体:
SetLayeredWindowAttributes(RGB(0xxff,0xff,0xfe),100,LWA_COLORKEY)
将边框设置为100的alpha,但内部完全透明

此变体:
SetLayeredWindowAttributes(RGB(0xxff,0xff,0xfe),100,LWA_COLORKEY | LWA_ALPHA)
将内部设置为100的ALPHA,但将边框设置为完全透明


如何使内部不透明和边框透明?在这种情况下,我不能使用多个顶级窗口来实现效果

使用,而不是
设置LayeredWindowAttributes
。您可以将整个帧(包括任何透明度)预渲染到32位位图上,将其选择到DC中,并将其传递到
UpdateLayeredWindow
,而不是
SetLayeredWindowAttributes
,请使用。您可以将整个帧(包括任何透明度)预渲染到32位位图上,将其选择到DC中并将其传递到
UpdateLayeredWindow

您需要两个窗口的三明治才能获得此效果。从我删除的答案上的评论可以清楚地看出,你不想这样做。没关系,没有人强迫你这么做。这是一个选择,我只是想知道有没有更简单的办法。干杯:)@Hand Passant最后你的方法更好了。我最终创建了一个由3个窗口组成的结构,所有窗口的移动和大小同步,以创建我的特定框架的整体效果。要获得这种效果,需要两个窗口的三明治。从我删除的答案上的评论可以清楚地看出,你不想这样做。没关系,没有人强迫你这么做。这是一个选择,我只是想知道有没有更简单的办法。干杯:)@Hand Passant最后你的方法更好了。我最终创建了一个由3个窗口组成的结构,所有窗口的移动和大小调整都是同步的,以创建特定frameOk cool的整体效果。如果框架也有子控件,这会起作用吗?您能否提供一个如何使用
UpdateLayeredWindow
的示例?好的。如果框架也有子控件,这会起作用吗?您能否提供一个如何使用
UpdateLayeredWindow
的示例?