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


Anmelden zum Antworten