CCombobox: Textfarbe setzen

mki_germo

Erfahrenes Mitglied
Hallo,

ich möchte in eine Combobox verschiedenfarbige Einträge haben, konnte bis jetzt jedoch noch nichts darüber finden, wie ich die Textfarbe für einen Eintrag setzen kann.

Die Texteinträge werden mit der AddString("text") Methode gesetzt.
Gibt es dafür überhaupt eine Möglichkeit oder geht sowas gar nicht unter MFC?


Vielen Dank schonmal im Vorraus,

Manuel Kipke
 
Hallo Manuel,

es läuft darauf hinaus, die Combobox als sog. Owner-Draw-Control zu verwenden. Das bedeutet, du gibst ihr den Stil "Besitzerzeichnung" und bist dann selbst dafür verantwortlich, die einzelnen Einträge zu zeichen. Dafür musst du eine eigene Klasse von CComboBox ableiten und den Member "DrawItem()" für die Ausgabe der Listeneinträge überschreiben. Ich denke, dazu solltest du schon einiges im Forum oder im Internet finden.

Ansonsten kannst du dir auch mal dieses Beispiel anschauen:

Gruß
MCoder
 
Hallo MCoder,

danke erstmal für deine prompte Hilfe.
Ich hab mir den Link einmal angesehen und hab nun folgendes Problem:

Wenn ich eine neue MFC-Applikation erstelle, dann funktioniert das einwandfrei.
Möchte ich jedoch in eine bestehende Anwendung einen neuen Dialog einfügen (CDialog), der die Abgeleitete Klasse nutzen soll, funktioniert das irgendwie nicht. Im Debugmodus bekomme ich eine Assertion in der afxwin2.inl auf Zeile 757.
Dabei ist auffällig, das das hWnd der Combobox null ist - bei der Demoanwendung ist ein Wert vorhanden.

Irgendjemand eine Ahnung, an was das liegen könnte?


Gruß,
Manuel Kipke
 
Da ist offensichtlich das Fenster des Controls nicht erzeugt worden. Dazu gibt es 2 Möglichkeiten:
Entweder Du rufst da, wo Du das Control verwenden willst, die Create-Funktion des Controls auf, bevor Du darauf zugreifst, oder Du packst es ebendort in die DoDataExchange-Funktion.
Als Beispiel: Du verwendest das Control in einem Dialog:
1.
Code:
BOOL CMyDialog::OnInitDialog()
{  
  ...
  m_MyCombo.Create(...);
  ...
}
2.
Code:
void CMyDialog::DoDataExchange(CDataExchange* pDX)
{
  CDialog::DoDataExchange(pDX);
  ...
  DDX_Control(pDX, IDC_COMBO_MY_COMBO, m_MyCombo);
  ...
}
 
Falls du den Dialog mit dem Dialog-Designer erstellt hast: Füge eine normale ComboBox ein, wähle die Option "Besitzerzeichnung" und füge eine Member-Variable vom Typ "Control" ein. Im Header des Dialogs ersetze dann den Deklarationstyp "CComboBox" durch den neuen Klassennamen.

Gruß
MCoder
 

Neue Beiträge

Zurück