ComboBox mit verschieden farbigen Einträgen

beli

Grünschnabel
Hallo,
ich versuch gerade eine (MFC) ComboBox zu schreiben, wo man den einzelnen Einträgen einen andere Farben zuordnen kann.
Ich habe bisher 2 verschiedene Ansätze probiert, aber beide führen nicht zum gewünschten Ergebnis.

1. Ansatz:
HBRUSH OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) in der Dialog Klasse überschreiben.
Problem:
Das ausgewälte wir nicht mit eingefärbt, weil es wie es scheint bei pWnd->GetDlgCtrlID() nicht die ID der Combobox zurück gibt.
  • Wahrscheinlich wird es schwer die Einträge in der Liste unterschiedlich zu färben.
2. Ansatz:
Eine ColorComboBox Klasse erzeugen die von CComboBox ableitet und void void DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) überschreibt.
Problem: Aus irgendeinem Grund wird die Funktion überhaupt nicht aufgerufen.

Header:
Code:
...
virtual void OnDrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct);
...
Cpp:
Code:
void CColorComboBox::OnDrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{...}
Hat jemand eine Idee was ich bei meinen Ansätzen falsch mache oder eine bessere Idee?
Gruß und Dank
Beli
 

pschilling

Erfahrenes Mitglied
Hi,

also dein zweiter Ansatz ist schon der richtige!

Der Grund, warum deine DrawItem Methode nicht aufgerufen wird ist, weil deine Combobox eine der beiden folgenden Stile haben muss!

CBS_OWNERDRAWFIXED The owner of the list box is responsible for drawing its contents; the items in the list box are all the same height.

CBS_OWNERDRAWVARIABLE The owner of the list box is responsible for drawing its contents; the items in the list box are variable in height.


Viel Spaß beim zeichnen..

Pit