All-aero window 控件的颜色混合 - 如何避免它

All-aero window have controls' colors blended - how to avoid it

我正在寻找一种将自定义控件绘制到对话框的客户端和非客户端区域的方法。下面的白色区域差不多

我使用了 DwmExtendFrameIntoClientArea 并且通过

在整个 window 上扩展了客户区,我设法获得了这种效果
MARGINS mar = {-1, -1, -1, -1};

DwmExtendFrameIntoClientArea ( hWnd, &mar );

但是现在我设置的每个控件都有透明背景

SetBkMode(hdc, TRANSPARENT);

将他们的颜色与航空材料混合(同样的问题you can see here)。

有没有办法让控件保持正确的颜色并避免与背景混合?

这是因为window将黑色作为透明度键。

您只需要设置另一个值:

SetWindowLong(hWnd,GWL_EXSTYLE,WS_EX_LAYERED);
// Choose a colour that you will not use in the program, eg RGB(200,201,202)
SetLayeredWindowAttributes(hWnd,RGB(200,201,202),0,LWA_COLORKEY);