Farbe in Titelleiste?
-
Moinsen,
Ich möchte die Farbe in der Titelleise ändern?
Ich meine den Farbverlauf, welcher standartmäßig blau ist.Wie funktionobelt das? thx
-
Es gibt da keine "SetTitlebarColor" Funktion.

Müsstest du alles selbst programmieren mit Hilfe der GDI Funktionen. GradientFill könnte dir beim Farbverlauf helfen.
Lass es lieber. Der Aufwand ist relativ groß und die User wird es nicht erfreuen.
-
@shareholder, willst du das systemweit machen? Wenn ja schau die mal die Funktionen GetSysColor/SetSysColor an. Dabei sind für dich die Elemente COLOR_GRADIENTACTIVECAPTION und COLOR_ACTIVECAPTION interessant.
-
Hab das auch vor einigen Jahren mal gemacht, ich such mal...
-
Ach, mist nachdem ichs endlich (auf der 4. CD) gefunden hab seh ich, dass ich geschummelt hab (war ja klar
).
Mit der Nachricht WM_NCPAINT müsste es aber gehen:
(Bsp. teils aus der MSDN)case WM_NCPAINT: { DefWindowProc(hwnd, message, wParam, lParam); // wenn du das weglässt musst du wohl den ganzen nicht-Client Bereich selbst zeichen, also auch unten, links und recht den Rand HDC hdc; hdc = GetDCEx(hwnd, (HRGN)wParam, DCX_WINDOW|DCX_INTERSECTRGN); // hier malst du die Titelleiste in deiner Lieblingsfarbe, die Position/Maße bekommst du von GetSystemMetrics() ReleaseDC(hwnd, hdc); return 0; }Aber:
WM_NCPAINT hab ich schon mal genutzt um in der Titelleiste noch was dazuzuschreiben, dabei ist mir aufgefallen, dass manchmal die Leiste neu gezeichnet wird, ohne dass WM_NCPAINT gesendet wurde, dann fehlt der Text natürlich. Passieren tut dies wenn dein Fenster im Vordergrund ist und du ein anderes anclickst und trotzdem noch die Titelleiste von deinem Fenster sichtbar ist, dann wird diese nämlich grau gemalt und kein WM_NCPAINT gesendet, erst wenn du das nun im Vordergrund befindliche Fenster verschiebst kommt die Nachricht. Umgehen könnte man das, wenn du auch in WM_ACTIVATE oder sonstwas neuzeichnest (weiß nicht genau bei welche Nachricht wirklich dafür verantwortlich ist), kannst ja mal mit Spy++ gucken, was alles kommt und bei diesen mal neuzeichnen, wenns perfekt werden soll.