我遇到了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。 如果有其他方法可以做到,我很高兴听到:)
再次感谢! :)
答案 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