All-aero窗口有控件'颜色混合 - 如何避免它

时间:2015-10-25 19:27:25

标签: c++ windows winapi aero dwm

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

enter image description here

我使用了DwmExtendFrameIntoClientArea,我通过使用

扩展整个窗口的客户区来设法获得该效果
MARGINS mar = {-1, -1, -1, -1};

DwmExtendFrameIntoClientArea ( hWnd, &mar );

但现在我用透明背景设置的每个控件

SetBkMode(hdc, TRANSPARENT);

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

控件是否有一种方法可以保留正确的颜色并避免与背景混合?

1 个答案:

答案 0 :(得分:1)

这是因为窗口将黑色处理为透明度键。

您只需要设置另一个值:

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);