Como você define a cor da mistura de vidro no Windows 10?
Usando oindocumentadoSetWindowCompositionAttribute
API no Windows 10, é possível ativar o vidro para uma janela. O vidro é branco ou transparente, como pode ser visto nesta captura de tela:
No entanto, o menu Iniciar do Windows 10 e o centro de notificações, que também usam vidro, combinam com a cor de destaque, da seguinte forma:
Como isso acontece?
InvestigaçõesA cor de destaque nos exemplos a seguir é roxa clara - aqui está uma captura de tela do aplicativo Configurações:
oEstrutura AccentPolicy definida neste código de exemplo possui estado de destaque, sinalizadores e campos de cores degradê:
AccentPolicy = packed record
AccentState: Integer;
AccentFlags: Integer;
GradientColor: Integer;
AnimationId: Integer;
end;
e o estado pode ter qualquer um destes valores:
ACCENT_ENABLE_GRADIENT = 1;
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
ACCENT_ENABLE_BLURBEHIND = 3;
Observe que os dois primeiros foram encontrados emessa essência do github.
O terceiro funciona bem - isso permite o vidro. Dos outros dois,
ACCENT_ENABLE_GRADIENT resulta em uma janela totalmente cinza, independentemente do que está por trás dela. Não há transparência ou efeito de vidro, mas a cor da janela que está sendo desenhada está sendo desenhada pelo DWM, não pelo aplicativo.ACCENT_ENABLE_TRANSPARENTGRADIENT resulta em uma janela pintada completamente com a cor de destaque, independentemente do que está por trás dela. Não há transparência ou efeito de vidro, mas a cor da janela que está sendo desenhada está sendo desenhada pelo DWM, não pelo aplicativo.Portanto, isso está chegando perto e parece ser o que algumas das janelas pop-up, como o applet de controle de volume, usam.
Os valores não podem ser agrupados e o valor do campo GradientColor não tem efeito, exceto que deve ser diferente de zero.
Desenhar diretamente em uma janela com vidro resulta em uma mistura muito estranha. Aqui está preenchendo a área do cliente com vermelho (0x000000FF no formato ABGR):
e qualquer alfa diferente de zero, por exemplo, 0xAA0000FF, resulta em nenhuma cor:
Não corresponda à aparência do menu Iniciar ou da área de notificação.
Como essas janelas fazem isso?