Как установить цвет смешивания стекла в Windows 10?
С использованиемнезадокументированныйSetWindowCompositionAttribute
API в Windows 10 можно включить стекло для окна. Стекло белое или прозрачное, как видно на этом скриншоте:
Тем не менее, меню «Пуск» Windows 10 и центр уведомлений, в котором также используется стекло, смешиваются с акцентным цветом следующим образом:
Как это сделать?
исследованияЦвет акцента в следующих примерах светло-фиолетовый - вот скриншот из приложения «Настройки»:
Структура AccentPolicy, определенная в этом примере кода имеет состояние акцента, флаги и градиентные цветовые поля:
AccentPolicy = packed record
AccentState: Integer;
AccentFlags: Integer;
GradientColor: Integer;
AnimationId: Integer;
end;
и состояние может иметь любое из следующих значений:
ACCENT_ENABLE_GRADIENT = 1;
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
ACCENT_ENABLE_BLURBEHIND = 3;
Обратите внимание, что первые два из них были найдены наэтот GitHub Гист.
Третий работает отлично - это позволяет стекло. Из двух других
В результате ACCENT_ENABLE_GRADIENT окно становится полностью серым, независимо от того, что находится за ним. Нет прозрачности или эффекта стекла, но нарисованный цвет окна рисуется DWM, а не приложением.ACCENT_ENABLE_TRANSPARENTGRADIENT приводит к окну, которое полностью окрашено цветом акцента, независимо от того, что стоит за ним. Нет прозрачности или эффекта стекла, но нарисованный цвет окна рисуется DWM, а не приложением.Так что это близко, и похоже, что некоторые из всплывающих окон, такие как апплет управления громкостью, используют.
Значения нельзя объединять или редактировать вместе, и значение поля GradientColor не имеет никакого эффекта, за исключением того, что оно должно быть ненулевым.
Рисование непосредственно на стекле с включенным окном приводит к очень странному смешиванию. Здесь он заполняет клиентскую область красным (0x000000FF в формате ABGR):
и любая ненулевая альфа, например, 0xAA0000FF, приводит к отсутствию цвета вообще:
Не соответствует внешний вид меню «Пуск» или области уведомлений.
Как эти окна делают это?