相关疑难解决方法(0)

如何在Windows 10上设置玻璃混合颜色?

在Windows 10上使用未记录的SetWindowCompositionAttributeAPI,可以为窗口启用玻璃.玻璃是白色或透明的,如截图所示:

在此输入图像描述

但是,Windows 10"开始"菜单和通知中心(均使用玻璃)都与强调色混合,如下所示:

在此输入图像描述

它是如何做到的?

调查

以下示例中的重点颜色为浅紫色 - 这是设置应用程序中的屏幕截图:

在此输入图像描述

此示例代码中定义AccentPolicy结构具有重音状态,标志和渐变颜色字段:

  AccentPolicy = packed record
    AccentState: Integer;
    AccentFlags: Integer;
    GradientColor: Integer;
    AnimationId: Integer;
  end;
Run Code Online (Sandbox Code Playgroud)

并且州可以具有以下任何值:

  ACCENT_ENABLE_GRADIENT = 1;
  ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
  ACCENT_ENABLE_BLURBEHIND = 3;
Run Code Online (Sandbox Code Playgroud)

请注意,前两个是在这个github gist上找到的.

第三个工作正常 - 这使玻璃.其他两个,

  • 无论背后是什么,ACCENT_ENABLE_GRADIENT都会产生一个完全灰色的窗口.没有透明度或玻璃效果,但绘制的窗口颜色是由DWM绘制的,而不是由应用程序绘制的.

在此输入图像描述

  • ACCENT_ENABLE_TRANSPARENTGRADIENT导致窗口完全涂上强调色,无论其背后是什么.没有透明度或玻璃效果,但绘制的窗口颜色是由DWM绘制的,而不是由应用程序绘制的.

在此输入图像描述

所以这就越来越近了,它似乎是像音量控制小程序一样使用的一些弹出窗口.

这些值不能一起排序,并且GradientColor字段的值除了必须为非零之外没有任何效果.

直接在玻璃窗口上绘图会导致非常奇怪的混合.这里用红色填充客户区(ABGR格式为0x000000FF):

在此输入图像描述

任何非零的alpha,例如0xAA0000FF,都不会产生任何颜色:

在此输入图像描述

既不匹配"开始"菜单或通知区域的外观.

这些窗户是如何做到的?

winapi aero dwm aero-glass windows-10

20
推荐指数
3
解决办法
1万
查看次数

模糊半透明形式的背景(如Aero玻璃)

我有一个无边框,不可调整大小的WPF表单(WindowStyle = None,allowsTransparency = True,ResizeMode = NoResize),具有半透明背景.这是一张图片,显示了一个半透明的红色矩形,现在看起来如何,在记事本上运行:

当前显示在记事本顶部的表单

然而,我希望背景模糊,就像Aero玻璃如何做到这一点,除了没有所有花哨的窗口边框和带条纹的彩色背景 - 我想自己处理.这是我希望它看起来像的模型:

我希望它的形式 - 模糊低于它的任何东西

我怎样才能以最有效的方式实现这一目标?

WinForms或WPF对我来说很好.希望它应该使用Aero玻璃使用的相同的东西(我很好用它只能启用Aero),而不是疯狂的东西,如捕获下面的屏幕区域作为位图和模糊.

这是我不想要的图片:

我不希望整个Aero玻璃窗镀铬

我知道这是可能的,我知道怎么做,但我不希望整个Aero玻璃窗口镀铬,或边框和标题栏,或窗口具有用户设置的Aero玻璃颜色,只是效果模糊窗口/窗体下面的任何东西.

c# wpf aero winforms aero-glass

12
推荐指数
1
解决办法
1万
查看次数

标签 统计

aero ×2

aero-glass ×2

c# ×1

dwm ×1

winapi ×1

windows-10 ×1

winforms ×1

wpf ×1