1

航空玻璃会导致很多人在尝试使用它时遇到问题。任何 alpha 值为 255 的东西似乎都被 DWM 视为透明,使用附加模糊来绘制它。我希望客户区域的一部分使用 Aero 玻璃,其余部分被视为不透明,因此我不必处理常见控件无法正确渲染的头痛问题。

MSDN 列出了一项功能DwmEnableBlurBehindWindow,可让您将客户区域的一部分标记为被 DWM 模糊。它接受一个DWM_BLURBEHIND指针,该指针具有指向HRGN窗口区域的句柄。当我使用这个函数时,整个窗口通过加法混合变得透明,但只有我传递给的窗口区域DwmEnableBlurBehindWindow变得模糊。有没有办法让窗口的其余部分变得透明?

我所拥有的看起来有点像:

blur.dwFlags = DWM_BB_ENABLE | DWM_BB_BLURREGION;
blur.hRgnBlur = CreateRectRgn(0, 0, 90, 90);
blur.fEnable = true;
DwmEnableBlurBehindWindow(hwnd, &blur);
RECT rect;
GetClientArea(&rect);
FillRect(hdc, &rect, CreateSolidBrush(0));
4

1 回答 1

1

来自 MSDN 库文章:

窗口中的 alpha 值得到尊重,并且模糊顶部的渲染将使用这些 alpha 值。确保窗口中所有像素的 alpha 值正确是应用程序的责任。一些 GDI 操作不保留 alpha 值,因此在呈现子窗口时必须小心,因为它们贡献的 alpha 值是不可预测的。

进行大多数GDI 操作,例如 FillRect()。您创建的画笔是用 24 位颜色绘制的,alpha 将为 0。这使窗口透明。例如,您需要切换到 GDI+。文字特别麻烦。以及传统的 Windows 控件,例如使用 GDI 绘制的 EDIT 和 LISTBOX。

于 2013-02-13T20:25:22.293 回答