¿Cómo se configura el color de mezcla de vidrio en Windows 10?

Utilizando laindocumentadoSetWindowCompositionAttribute API en Windows 10, es posible habilitar el vidrio para una ventana. El vidrio es blanco o transparente, como se ve en esta captura de pantalla:

Sin embargo, el menú Inicio de Windows 10 y el centro de notificaciones, que también usan vidrio, ambos se mezclan con el color de acento, así:

Como lo hace

Investigaciones

El color de acento en los siguientes ejemplos es púrpura claro: aquí hay una captura de pantalla de la aplicación Configuración:

losEstructura de AccentPolicy definida en este código de ejemplo tiene estados de acento, banderas y campos de color degradado:

  AccentPolicy = packed record
    AccentState: Integer;
    AccentFlags: Integer;
    GradientColor: Integer;
    AnimationId: Integer;
  end;

y el estado puede tener cualquiera de estos valores:

  ACCENT_ENABLE_GRADIENT = 1;
  ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
  ACCENT_ENABLE_BLURBEHIND = 3;

Tenga en cuenta que los dos primeros de estos se encontraron enesta esencia de github.

El tercero funciona bien, eso permite el vidrio. De los otros dos

ACCENT_ENABLE_GRADIENT da como resultado una ventana que es completamente gris, independientemente de lo que esté detrás. No hay transparencia ni efecto de cristal, pero el color de la ventana que se dibuja lo dibuja el DWM, no la aplicación.

ACCENT_ENABLE_TRANSPARENTGRADIENT da como resultado una ventana que está pintada completamente con el color de acento, independientemente de lo que esté detrás. No hay transparencia ni efecto de cristal, pero el color de la ventana que se dibuja lo dibuja el DWM, no la aplicación.

Así que esto se está acercando, y parece ser lo que usan algunas de las ventanas emergentes como el applet de control de volumen.

Los valores no pueden ordenarse juntos, y el valor del campo GradientColor no tiene ningún efecto, excepto que debe ser distinto de cero.

Dibujar directamente en una ventana habilitada para vidrio da como resultado una mezcla muy extraña. Aquí está llenando el área del cliente con rojo (0x000000FF en formato ABGR):

y cualquier alfa diferente de cero, por ejemplo, 0xAA0000FF, no produce ningún color:

Tampoco coincide con el aspecto del menú Inicio o el área de notificación.

¿Cómo lo hacen esas ventanas?

Respuestas a la pregunta(3)

Su respuesta a la pregunta