0

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

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

有任何解决这个问题的方法吗?

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

非常感谢!

2012/6/19 更新:通过使用“SetLayeredWindowAttributes”将窗口的透明键颜色更改为非黑色,然后使用“DwmExtendFrameIntoClientArea”可以解决玻璃窗口上的CONTROLS(BUTTONs,EDITs等)的标题文本问题.

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

那么,是否有任何 API 可以更改“DrawThemeTextEx”中使用的透明键颜色?

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

非常感谢,再次!:)

4

1 回答 1

0

看看在 MSDN中绘制标题标题:

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

虽然效果看起来不是很完美,但是解决了问题。

参考:SetLayeredWindowAttributes 和 BitBlt 之间的 C++ WinAPI 冲突

于 2015-10-04T11:30:26.107 回答