[C++] Farbe für bestimmte Buchstaben eines Strings

dabu

Well-known member
ID: 11566
L
20 April 2006
7.229
407
Tja, ich stehe mal wieder vor einem Problem *seufz*.

Nehmen wir an ich habe 2 Strings, die ähnlich sind. Als Beispiel:

Satz 1: Der Hund jagt die Katze.
Satz 2: Der Huund jagte die Katze und fing sie.

Jetzt sollen alle Unterschiede im 2. Satz farblich markiert werden und in einem Edit Control ausgeben werden. Satz 2 sollte dann also so aussehen: Der Huund jagte die Katze und fing sie.

Was ich hinbekomme ist der Vergleich der Stings und das Finden der Unterschiede. Auch die Ausgabe im Edit Control ist kein Problem. Aber wie bekomme ich denn die Färbung einiger Buchstaben eines Strings hin? Ich hab gestern lange Zeit danach gegoogelt, aber das alles hatte mir nicht weitergeholfen. Hat jemand eine Idee oder Ahnung davon?
 
In einem einfachen Text-Fenster geht das nicht.

Du benutzt die MFC ? Dann wäre *nachschlag* CRichEditCntrItem, was du suchst.

Ansonsten geht das normal, indem du ein Fenster der Klasse RICHEDIT_CLASS erstellst. Styles und Messages siehe Manual, das findest du dann ja selber :)

edit:
EM_SETCHARFORMAT dürfte die richtige Message sein, um die Farbe zu ändern.
 
Ich hab das jetzt ausführlich getestet und einen Weg gefunden, wie ich das mit dem Färben hinbekomme... allerdings bekomme ich die Ausgabe nicht hin, weil ich einen doofen Assertion-Fehler bekomme:

afxcmn.inl in line 638. In der Zeile steht folgendes:
_AFXCMN_INLINE int CRichEditCtrl::GetLineCount() const
{ ASSERT:):IsWindow(m_hWnd)); return (int)::SendMessage(m_hWnd, EM_GETLINECOUNT, 0, 0); }


Das heißt ich habe einen Fehler bei der Überprüfung von ::IsWindow(m_hWnd)... das heißt nun also, dass ich kein Fenster habe oder wie soll ich das verstehen? Ich habe gerade keinen Plan, wie ich die Fehlermeldung wegbekommen soll. Liegt das an meinem Code oder an irgendeiner fehlenden Initialisierung?

Anfangs konnte ich das Dialogfenster gar nicht erst öffnen, weil ich AfxInitRichEdit(); nicht drin hatte - eventuell hängt das auch damit zusammen?