本帖最后由 jpinglove 于 2009-06-30 00:45:17 编辑

解决方案 »

  1.   

    CEdit不支持
    Richedit的话,在段落格式里面设置,参考wordpad示例。
      

  2.   

    用CRichEditCtrl吧,
    先用CRichEditCtrl::SetSel选择要设置颜色的字符,
    再用CRichEditCtrl::SetSelectionCharFormat设置选中字符的颜色。
    PS:用CRichEditCtrl前,要把AfxInitRichEdit放到InitInstance里进行初始化。不然会出错。CRichEditCtrl m_cRichEdit;
    int lineStart,lineEnd;
    CHARFORMAT cFmt;
    cFmt.cbSize = sizeof(CHARFORMAT);
    cFmt.crTextColor = RGB(0,0,255);
    cFmt.dwEffects   = 0;
    cFmt.dwMask      = CFM_COLOR;lineStart = m_cRichEdit.LineIndex(0);//取第一行的第一个字符的索引
    lineEnd   = m_CRichEdit.LineIndex(1)-1;//取第一行的最后一个字符的索引——用第二行的第一个索引减1来实现
    m_cRichEdit.SetSel(lineStart,lineEnd);//选取第一行字符
    m_cRichEdit.SetSelectionCharFormat(cFmt);//设置颜色
      

  3.   

    CRichEditCtrl有现成的函数可以用,
    用SetSel来选中你需要改的文字,再用SetSelectionCharFormat来设置一下就行了用CEdit的话,需要子类化,这样你想怎样改就怎样改。
      

  4.   

    对,用CRichEditCtrl这样确实能实现不同的行,不同的颜色.不这,这里有一个严重的问题.如果多行的话,就只能有一行,是颜色不同的.大家看下,上面的图.我设置的默认颜色是绿色,自己定义的别一种颜色是橙色.
    我想要的效果是:
    第一行,  也就是 1111 这个是绿色.
    然后,第二行, 22222是橙色.
    这样交替着两种颜色.
    第三行 的 3333333 是绿色
    第四行 的 444444 是橙色.
    可是,大家 也能看到,并不是那样的, 而是当CRichEditCtrl文本发生改变时,里面所有的文字颜色变成默认颜色.
    这样一来,只有一行文字的颜色在变.怎么能解决这个问题叫呢???
      

  5.   

    void CTipTestDlg::EditAddText()
    {
    CString s1 = "";
    CString s2 = ""; //从EDIT上得到刚输入的字符串(也就是图片中,显示5555那个EDIT)
    GetDlgItemText(IDC_EDIT3, s1);
    SetDlgItemText(IDC_EDIT3 , ""); //把输入栏清空
    s2 += s1 + "\r\n"; //加个回车 int start = m_Redit.GetTextLength();         //得到目前RICH里,字符个数
    int end = 0;
    m_str += s2; //m_str是RICH关联的一个CString变量
    UpdateData(FALSE);
    //SetDlgItemText(IDC_RICHEDIT2 , s2);
    m_Redit.LineScroll(m_Redit.GetLineCount() , 0); //让RICH向下滚动,m_Redit也是一个关联变量
    int len  = m_Redit.GetLineCount(); //得到行数
    len = len%2; 模上2 switch (len)
    {
    case 1:
    end = m_Redit.GetTextLength(); //得到增加后的文字个数
    m_Redit.SetSel(start , end); //设置选择
    m_Redit.SetSelectionCharFormat(mycf); //改变颜色
    break;
    }
    }
    上面是我写的功能实现代码, 这个是响应一个回车事件, 然后,  在这里处理的.