Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/cakephp/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Winapi DwmEnableBlurBehindWindow使整个客户端区域透明_Winapi_Aero Glass - Fatal编程技术网

Winapi DwmEnableBlurBehindWindow使整个客户端区域透明

Winapi DwmEnableBlurBehindWindow使整个客户端区域透明,winapi,aero-glass,Winapi,Aero Glass,Aero glass在尝试使用它时会给很多人带来麻烦。alpha值为255的任何对象在DWM中似乎都被视为透明,并使用附加模糊进行绘制。我希望客户区的一部分使用Aero玻璃,其余部分视为不透明,这样我就不必处理常见控件无法正确渲染的问题 MSDN列出了一个函数DwmEnableBlurBehindWindow,可用于将部分客户端区域标记为DWM模糊。它采用DWM\u BLURBEHIND指针,该指针具有指向窗口区域的HRGN句柄。当我使用此函数时,整个窗口通过添加混合变得透明,但只有传递给Dwm

Aero glass在尝试使用它时会给很多人带来麻烦。alpha值为255的任何对象在DWM中似乎都被视为透明,并使用附加模糊进行绘制。我希望客户区的一部分使用Aero玻璃,其余部分视为不透明,这样我就不必处理常见控件无法正确渲染的问题

MSDN列出了一个函数
DwmEnableBlurBehindWindow
,可用于将部分客户端区域标记为DWM模糊。它采用
DWM\u 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));

从MSDN库文章:

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


使之成为大多数GDI操作,如FillRect()。创建的笔刷使用24位颜色绘制,alpha将为0。这使得窗口透明。您需要切换到GDI+。文本尤其麻烦。以及传统的Windows控件,如使用GDI绘制的编辑和列表框。

摘自MSDN库文章:

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


使之成为大多数GDI操作,如FillRect()。创建的笔刷使用24位颜色绘制,alpha将为0。这使得窗口透明。您需要切换到GDI+。文本尤其麻烦。以及传统的Windows控件,如使用GDI绘制的编辑和列表框。

是的,仔细阅读我也发现了这一点“将模糊效果应用于窗口的子区域时,窗口的alpha通道将用于非模糊区域。这可能会导致窗口的非模糊区域出现意外的透明度。因此,在对子区域应用模糊效果时要小心。“Dang.DWM也有一种奇怪的方式来“尊重”alpha,因为在alpha 254上它基本上是不透明的,但在alpha 255上它会进行加法混合,就像我用GDI+测试的那样。是的,仔细阅读我也发现了这一点“当你将模糊效果应用到窗口的子区域时,窗口的alpha通道用于非模糊区域。这可能会导致窗口的非模糊区域出现意外的透明度。因此,在对子区域应用模糊效果时要小心。“Dang.DWM还有一种“尊重”alpha的奇怪方式,因为在alpha 254上它基本上是不透明的,但在alpha 255上它会进行添加混合,正如我用GDI+测试的那样。