Wie stellen Sie die Glasmischfarbe unter Windows 10 ein?
Verwendung derundocumentedSetWindowCompositionAttribute
API Unter Windows 10 ist es möglich, Glas für ein Fenster zu aktivieren. Das Glas ist weiß oder klar, wie in diesem Screenshot gezeigt:
Das Windows 10-Startmenü und das Benachrichtigungscenter, in dem auch Glas verwendet wird, werden jedoch wie folgt mit der Akzentfarbe gemischt:
Wie macht es das?
UntersuchungenDie Akzentfarbe in den folgenden Beispielen ist hellviolett - hier ein Screenshot aus der Einstellungen-App:
DasAccentPolicy-Struktur in diesem Beispielcode definiert hat Akzent, Flaggen und Farbverlaufsfelder:
AccentPolicy = packed record
AccentState: Integer;
AccentFlags: Integer;
GradientColor: Integer;
AnimationId: Integer;
end;
und der Zustand kann einen der folgenden Werte haben:
ACCENT_ENABLE_GRADIENT = 1;
ACCENT_ENABLE_TRANSPARENTGRADIENT = 2;
ACCENT_ENABLE_BLURBEHIND = 3;
Bitte beachten Sie, dass die ersten beiden auf @ gefunden wurdedieser github gist.
Der dritte funktioniert gut - das ermöglicht Glas. Von den anderen beiden,
ACCENT_ENABLE_GRADIENT führt zu einem vollständig grauen Fenster, unabhängig davon, was sich dahinter befindet. Es gibt keinen Transparenz- oder Glaseffekt, aber die gezeichnete Fensterfarbe wird vom DWM und nicht von der App gezeichnet.ACCENT_ENABLE_TRANSPARENTGRADIENT führt zu einem Fenster, das vollständig mit der Akzentfarbe gestrichen wird, unabhängig davon, was dahintersteckt. Es gibt keinen Transparenz- oder Glaseffekt, aber die gezeichnete Fensterfarbe wird vom DWM und nicht von der App gezeichnet.So kommt dies immer näher und es scheint, dass einige der Popup-Fenster, wie das Applet zur Lautstärkeregelung, dies verwenden.
Die Werte können nicht zusammen bearbeitet werden, und der Wert des GradientColor-Felds hat keine Auswirkung, außer dass er nicht Null sein darf.
Das direkte Zeichnen auf ein glasfähiges Fenster führt zu sehr merkwürdigen Überblendungen. Hier füllt es den Client-Bereich mit Rot (0x000000FF im ABGR-Format):
und ein Alpha ungleich Null, z. B. 0xAA0000FF, führt zu keiner Farbe:
Weder das Aussehen des Startmenüs noch des Benachrichtigungsbereichs stimmen überein.
Wie machen diese Fenster das?