赛特4.2 https://sciter.com/sciter-4-2-support-of-acrylic-theming/添加了对亚克力背景的支持(在 Windows 和 MacOS 上):
Sciter 中的 Acrylic 主题和 UWP 类似控件(CSS 样式):
uSciter 演示浏览器,Windows:
uSciter 演示浏览器,MacOS:
Windows 上的 Sciter 是一个普通的 Win32 应用程序(不是 UWP)。
为了渲染后面的模糊,它执行以下操作:
创建窗口WS_EX_NOREDIRECTIONBITMAP
前国旗。
Calls:
struct WINDOWCOMPOSITIONATTRIBDATA {
WINDOWCOMPOSITIONATTRIB dwAttrib;
PVOID pvData;
SIZE_T cbData;
};
enum ACCENT_STATE {
ACCENT_DISABLED = 0,
ACCENT_ENABLE_GRADIENT = 1,
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2,
ACCENT_ENABLE_BLURBEHIND = 3,
ACCENT_ENABLE_ACRYLIC_BLURBEHIND = 4,
ACCENT_INVALID_STATE = 5
};
ACCENT_POLICY accent = { ACCENT_ENABLE_ACRYLIC_BLURBEHIND, 0, clr, 0 };
WINDOWCOMPOSITIONATTRIBDATA data;
data.dwAttrib = WCA_ACCENT_POLICY;
data.pvData = &accent;
data.cbData = sizeof(accent);
SetWindowCompositionAttribute(get_hwnd(), &data);
其中 clr 是 AGBR,类似0xCC000000
用于背景后面的黑暗模糊。
使用 DirectComposition Visual 上设置的 Direct2D 表面渲染内容,使用附加到窗口的交换链IDXGIFactory2::CreateSwapChainForComposition
所有这些的细节都有点模糊和 COM 冗长,叹息(我是 Sciter 的作者)。
至少你应该使用 Direct2D 进行绘图,以便呈现这样的东西。