CRichEditCtrl Textfarbe ändern
-
Hey, ich möchte in einem EditCtrl Text in verschiedenen Farben darstellen.
Dafür hab ich mir folgende Test-Funktion geschrieben:int CTestDlg::show_data_red() { CString show_data = _T("Test: RED\n"); CHARFORMAT cf; cf.cbSize = sizeof(cf); cf.dwMask=CFM_COLOR; cf.crTextColor = 0x000000FF; m_cTestReport.SetSelectionCharFormat(cf); m_cTestReport.SetSel(m_cTestReport.GetTextLength(), -1); m_cTestReport.ReplaceSel(show_data); return 0; }Der Text wird richtig reingeschrieben, jedoch ändert sich nichts an der Farbe egal welchen Wert ich crTextColor zuordne.
Gibt es da einen "bessere" Ansatz?Vielen Dank im Voraus
Grüße Sebastian
-
int CTestDlg::show_data(CString text, int color) { CString show_data = text; CHARFORMAT cf; cf.cbSize = sizeof(cf); cf.dwEffects &= ~CFE_AUTOCOLOR; cf.dwMask=CFM_COLOR; cf2.crTextColor = color; // Format: 0x00bbggrr m_cTestReport.SetSel(m_cTestReport.GetTextLength(), -1); m_cTestReport.SetSelectionCharFormat(cf2; m_cTestReport.ReplaceSel(show_data); return 0; }Hab nur die Zeile mit dwEffects ergänzen müssen. Also so funktionierts, einfach Text und Farbe im angegebenen Format übergeben.
-
Hallo,
das Problem hätte auch verhindert werden können, wenn die CHARFORMAT-Struktur vorher mit Nullen initialisiert worden wäre:
memset(&cf, 0, sizeof(CHARFORMAT) );und man benötigt
cf.dwEffects &= ~CFE_AUTOCOLOR;nicht.
Denn ohne dies waren in cf Zufallswerte, die hier dazu geführt haben, dass CFE_AUTOCOLOR gesetzt war, das wiederum bewirkte, dass crTextColor laut Dokumentation ignoriert wurde. Man muss dann tatsächlich erst CFE_AUTOCOLOR mit der obigen Zeile entfernen...
MfG,
Probe-Nutzer