008
21.03.2004, 21:57 Uhr
Philipp
|
So, ich hab mich nun mal an die RichEditCtrl rangewagt, klappt auch alles so wie vorher, nur bekomme ich die Schriftfarbe immer noch nicht geändert.
Hab ich das richtig verstanden, dass man erst den Text hinzufügt, ihn dann per SetSel() auswählt, und dann per SetSelectionCharFormat() und der dazugehörigen CHARFORMAT Struktur die Farbe verändert? Weil ich mache das eigentlich so, es funktioniert aber nicht!
Bei mir im Programm hab ich für ein RichEditCtrl 2 Membervariablen, vielleicht liegts daran: Die sind m_strTextOutput als CString, und m_ctrlTextOutput als CRichEditCtrl. Folgenden Code benutze ich zum ändern der Farbe, der Code wird jedesmal dann aufgerufen wenn eine neue ChatMessage von nem anderen Benutzer ankommt :
C++: |
int CurrentNrChars=pDlg->m_strTextOutput.GetLength();
pDlg->m_strTextOutput+=StringToAdd; pDlg->m_ctrlTextOutput.LineScroll(1); pDlg->UpdateData(false); pDlg->UpdateData(true); pDlg->m_ctrlTextOutput.SetSel(CurrentNrChars,pDlg->m_strTextOutput.GetLength()); CHARFORMAT lbCharFormat; lbCharFormat.cbSize=sizeof(lbCharFormat); lbCharFormat.dwMask=CFM_COLOR; long pos1=0, pos2=0; pDlg->m_ctrlTextOutput.GetSel(pos1,pos2); if(UserID>=253) lbCharFormat.crTextColor=RGB(255,255,255); else { // Den Benutzer mit der betreffenden ID finden int UserIndex=pDlg->ConnectedUsers.GetIndexByUserID(UserID); if(UserIndex<0 ||UserIndex>pDlg->iMaxUsers) return;
// Nun die Farbe abhängig vom User, der die Message geschrieben hat, abändern lbCharFormat.crTextColor=Color[pDlg->ConnectedUsers.pUserData[UserIndex].dwFontColor]; } CString CurSelText=pDlg->m_ctrlTextOutput.GetSelText(); int RetValue=pDlg->m_ctrlTextOutput.SetSelectionCharFormat(lbCharFormat);
pDlg->m_ctrlTextOutput.GetSelectionCharFormat(lbCharFormat); pDlg->UpdateData(false);
|
Hat einer ne Idee, warum das nicht geht? Die Selektion des Textes ist ok, er selektiert immer wirklich den text der neuen Message, das sehe ich einmal an der Variable CurSelText, und an pos1/pos2. Die Funktion SetSelectionCharFormat() gibt auch immer eine 1, d.h. Success, zurück. Ich weiß echt net woran das liegt. Könnte mir halt nur vorstellen, dass es daran liegt das ich den Text über den CString hinzufüge, und dann aber per CRichEditCtrl weiterarbeite...
Habt ihr ne Lösung?
THX Philipp |