Farben von ComboBox verändern
-
Hallo,
ich weiss nicht wie ich die farben verändere.
Die der listbox kann man ja mit WM_CTLCOLORLISTBOX verändern, die des edit-controls mit WM_CTLCOLOREDIT.
Was aber wenn man den stil CBS_DROPDOWNLIST verwendet, man also keine edit-box hat, sondern unveränderbaren text hat. wie verändert man da die hintergrundfarbe?
CTLCOLORSTATIC scheint nicht zu funktionieren..
danke sehr
-
uh, keiner?

-
hier solltest du genau das finden was du suchst:
-
WM_CTLCOLORLISTBOX wird an die ComboBox selber gesendet. Wenn Du diese behandeln wilst musst Du also die ComboBox subclassen, dannkannst Du auch die entsprechende DropDown Liste einfärben.
-
WM_CTLCOLORLISTBOX funktioniert auch ohne Subclassen, aber ich kriege halt den Edit-Control-Teil der ComboBox nicht eingefärbt..
Bei CBS_DROPDOWN, wo man eine Liste + Edit-Control hat, in welchem man den Text ändern kann, funktioniert WM_CTLCOLOREDIT.
Bei CBS_DROPDOWNLIST, wo der Text im Edit-Control ReadOnly ist, funktioniert weder WM_CTLCOLOREDIT, noch WM_CTLCOLORSTATIC.Mit WM_DRAWITEM habe ich noch nicht geguckt, ob ich es hinkriege, werde ich aber noch machen, danke
-
Dann schau mal mit dem Spy++ nach, wer die WM_CTLCOLOR... Nachricht vom Edit Control bekommt.
Evtl. musst Du doch die COmboBox subclassen um diese WM_CTLCOLOREDIT Nachricht zu erhalten.
-
Ach, ne, Entschuldigung..
Die Nachricht WM_CTLCOLOREDIT bekommt das Parent, auch mit dem hWnd, das CreateWindowEx zurückliefert, aber dann hat die ComboBox nur einen gefärbten Rand.
Das ist sowohl bei CBS_DROPDOWN als auch bei -LIST der Fall..
Screenshot:
http://img517.imageshack.us/img517/9105/86275374.pngCode ist nur
case WM_CTLCOLORLISTBOX: return GetSysColorBrush(3); case WM_CTLCOLOREDIT: return GetSysColorBrush(2);Wenn ich eine ComboBoxEx32 erstelle, dann muss ich die anscheinend für WM_CTLCOLOR* subclassen, dafür färbt WM_CTLCOLOREDIT dann nicht nur den Rand, sondern alles ein..
Muss ich also Owerdrawn + WM_DRAWITEM oder halt ComboBoxEx32 benutzen?..
Danke!
-
SetBkColor vergessen?