有没有办法解决VC6.0中“DwmEnableBlurBehindWindow”的副作用?

时间:2012-06-18 06:39:24

标签: c++ windows api dwm

我遇到了MSDN主题中提到的确切问题:DWM Blur Behind Overview

在调用DwmEnableBlurBehindWindow之后,客户区变成了漂亮的玻璃,但不幸的是,控件上的所有黑色文本(按钮,编辑,静态等)也变得透明,就像Topic on MSDN一样。

有什么方法可以解决这个问题吗?

顺便说一句,我的开发环境是VC ++ 6.0,我必须使用DrawThemeTextEx API绘制一些发光文本,所以我不能简单地使用DwmExtendFrameIntoClientArea。我必须使用DwmEnableBlurBehindWindow来启用客户区域的玻璃效果。

非常感谢!

2012年6月19日 更新: 通过使用" SetLayeredWindowAttributes"将窗口的TRANSPARENT KEY COLOR更改为非黑色,然后使用" DwmExtendFrameIntoClientArea"可以在玻璃窗上解决CONTROLS(BUTTON,EDIT等)的字幕文本问题。

但是就这样," DrawThemeTextEx"无法正常工作。看起来DrawThemeTextEx只能使用RGB(0,0,0)作为其透明键颜色。

那么,是否有任何API可以改变" DrawThemeTextEx"使用的TRANSPARENT KEY COLOR。在?

我的最终目标是在没有" DwmEnableBlurBehindWindow"的情况下在玻璃(Aero)窗口上绘制一些发光文字。 MSDN主题中提到的副作用:DWM Blur Behind Overview,http://msdn.microsoft.com/en-us/library/aa969537.aspx。 如果有其他方法可以做到,我很高兴听到:)

再次感谢! :)

1 个答案:

答案 0 :(得分:0)

在MSDN中查看Painting the caption title

在示例中找到行HBITMAP hbmOld = (HBITMAP)SelectObject(hdcPaint, hbm);

然后,在它之后添加以下行:

// You should have set RGB(200,201,202) as the transparency key
FillRect(hdcPaint,&rcClient,CreateSolidBrush(RGB(200,201,202)));

虽然效果似乎并不完美,但它解决了这个问题。

参考:C++ WinAPI Conflict between SetLayeredWindowAttributes and BitBlt