Ändern Sie die Farbe der Titelleiste (Beschriftung) einer win32-Anwendung

9

Ich möchte die Farbe der Titelleiste in meiner Anwendung ändern, wie ich es in Programmen wie Skype Preview gesehen habe. Ich habe nur eine Lösung gefunden, die im Internet dafür angeboten wird (WM_NCPAINT), die es erfordert, dass ich eine vollständig benutzerdefinierte Titelleiste zeichne, die natürlich nicht ideal ist, wenn ich nur die Hintergrundfarbe ändern möchte. Kennt jemand eine bessere Lösung? Jemand hat vorgeschlagen, GetSysColor einzubinden, aber es wird nie mit einem Index von 2 (COLOR_ACTIVECAPTION) aufgerufen, so dass die Farbe von woanders abgerufen wird.

Aktuelle Titelleiste:

Endziel:

    
Dalton Sandbothe 01.09.2016, 02:31
quelle

2 Antworten

2

Sie können versuchen, ein Fenster ohne Rahmen zu erstellen; Ich habe hier eine Referenz gefunden: Öffnen eines Fensters ohne Titelleiste mit win32

und dann erstellen Sie Ihre eigene Titelleiste in Ihrer Anwendung, in der Farbe, die Sie mögen (am oberen Rand des Fensters beginnend mit dem sichtbaren Teil).

    
yd1 11.10.2016 19:12
quelle
0

Das erste, was ich sagen werde ist: Sie wurden gewarnt! Dies ist eine äußerst mühsame Aufgabe. Es ist ein langer Weg von einfach und viel Zeit wurde mit dem Lesen der Wine-Quellen (Linux-Implementierung der nativen Win32-Funktionalität) verbracht.

Wenn ich diese Frage sah, erinnerte ich mich an meine Bemühungen, dasselbe Ergebnis zu erzielen. Der Prozess ist ein wenig verworren und führt zu viel mehr Verantwortung als nur die Titelleiste zu malen. (Ich habe etwa 500 Zeilen Code enthalten)

Unter anderem müssen Sie Fensteraktivierung / -inaktivierung, Größenanpassung, NC-Bereichsschaltflächen, Anwendungssymbol und Titeltext behandeln.

Mit einigen (Zeichen) Dienstprogrammfunktionen in anderen Dateien, die ich nicht aufgenommen habe, wurde Folgendes erreicht:

Beides sind Änderungen an diesem Dialog:

Mit Hilfe dieser (farblich markierten) Bilder: und etwas Strecken / Zeichnen (das Bild ist in 9 Teile geteilt)

Ich merke bei der Überarbeitung dieses Codes, dass die Grenzen vom Client-Bereich überstrichen werden. Ich stelle mir das vor, weil ich es als Reaktion auf die WM_NCCALCSIZE-Nachricht nicht korrekt skaliert habe. Ich habe auch ein anderes Bild verwendet, das tatsächlich 8 Pixel breit war, anstatt die 14, die diese beiden zeigen. (Sie können den auskommentierten Code als Antwort auf die Nachricht sehen, die ich erwähnte)

Die Idee ist, dass wir zuerst das WindowProc der Standard-Dialogbox klassen. In diesem Unterklasse-Handler teilen wir dem Desktop-Fenster-Manager mit, die Komposition für unser Fenster zu deaktivieren. Wir richten ein mehrschichtiges Fenster ein (so erscheint das schwarze halbtransparent) und führen schließlich die Nicht-Client-Zeichnung als Antwort auf a aus WM_NCPAINT Nachricht.

Ich werde auch darauf hinweisen, dass ich aus Gründen, die mir seit langem entgangen sind, nicht besonders mit der Funktionsweise des Codes zufrieden war.

Mit diesem gesagt, hier ist ein Code, in den Sie Ihre Zähne versenken können:

%Vor%

Finden Sie unten die Funktionen, die:  - Laden Sie eine PNG-Datei (verwendet GDI +)  - strecke dieses Bild auf die Ränder

%Vor%

Abschließend der Code zum Verankern von Steuerelementen im Fenster (wird automatisch neu berechnet, wenn das Fenster neu skaliert wird)

%Vor%     
enhzflep 11.10.2016 21:44
quelle

Tags und Links