[WinAPI] Textfarbe von Toolbar ändern

Hunter

Erfahrenes Mitglied
Hallo,

ist es irgendwie möglich die Textfarbe der Toolbar zu ändern. Nach Erfolglosem Googeln bin ich dann doch noch über eine mögliche Lösung gestoßen.
Undzwar war dort der Vorschlag, die Toolbar in eine Rebar zu packen und die Hintergrundfarbe der Rebar zu ändern um die Textfarbe somit zu ändern. Hab ich jedoch noch nicht ausprobiert, und wollte mal hier fragen ob jemand eine Lösung dafür hat.
 
Es wäre zwar trotzdem interessant wie man die Farbe des Textes ändern könnte, aber um mein Problem mal zu beschreiben:

Ich habe ein Fenster erstellt, dessen Hintergrund die Farbe der Titelleiste hat (Blur):
C++:
case WM_ACTIVATE:
     DWM_BLURBEHIND blur;
     blur.fEnable = TRUE;
     blur.dwFlags = DWM_BB_ENABLE;


     DwmEnableBlurBehindWindow(hWnd,&blur);
     break;


Und nun erstelle ich eine Transparente Toolbar, füge Items hinzu, setze Größe udg:
C++:
hWndToolbar = CreateWindowEx(NULL, TOOLBARCLASSNAME, NULL, WS_CHILD | TBSTYLE_WRAPABLE | TBSTYLE_LIST | TBSTYLE_TRANSPARENT | CCS_NODIVIDER | CCS_NOPARENTALIGN,
                                                       3, 3, 230, 0, hWnd, NULL, (HINSTANCE) hImageList, NULL);


Alles passt, sie wird angezeigt, kein Problem bis auf den Text. Dieser ist transparent und hat einen ganz leichten Umriss, sodass man kaum erkennt was darauf steht. Hintergrundfarbe des Main-Fensters zu ändern macht keinen Unterschied.



Nun, wie schaffe ich es, dass der Text nicht mehr transparent, sondern normal schwarz ist? Ist dies ein Fehlerhaftes Auftreten oder muss ich da noch einige Einstellungen vornehmen?
 
Super, funktioniert. :)

Jetzt gibt es allerdings nur noch ein Problem: Undzwar wird standardmäßig ein Rand beim "überfahren" des Items gezeichnet. Da ich aber WM_PAINT überschreibe geschieht hier leider nichts.
Gibt es dafür einen Trick, oder muss ich da selbst ran?
 
Du rufst vielleicht die DefWindowProc auf??
mach das mal nicht, wenn Du WM_PAINT Message abfängst.
 
Was denn jetzt? :confused:

Wenn ich die DefWindowProc() aufrufe, dann wird alles standardmäßig gezeichnet, andernfalls nicht. Nur möchte ich es gerne "kombinieren", sodass ich nur den Text zeichne und der Rest soll gleich bleiben.
 
Achso danke, mit GetWindowDC() funktionierts jetzt.
Allerdings passiert das, was ich befürchtet habe. Falls ich über ein Item schwebe wird der von mir gezeichnete Text nicht mehr angezeigt. Sobald ich wieder vom Item weg fahre, erscheint der Text wieder.
 
must mal schauen, vielleicht gibts da irgendein unter message commando (wparam) das ein handle vom Text wieder zurückgibt.
Beispiel: ScrollBars: da musst Du auch erst WM_HSCROLL oder WM_VSCROLL abfangen und dann noch mitels wparam SB_LINELEFT oder SB_LINERIGHT abfragen, wenn Du die scrollbar clicks.
Gleiches gilt für Button Elemente, da gibts unter Messages, wenn die maus auf dem button ist, wenn der button geklickt , etc... wird.
 
Nein, bei WM_PAINT gibt's keine "untermessages".
Ich müsste es irgendwie schaffen, dass nachdem es Standardmäßig alles fertiggezeichnet hat noch eine Funktion aufruft, mit welcher ich dann den Text darüber zeichne.
Ansonsten fällt mir nichts anderes ein außer es selbst zu zeichnen.
 
Zurück