就是说,编辑框中显示很多行,每行都是动态输入的,根据事件的成功与否,每次输入的字符的颜色要不同。怎么实现?
在显示的函数中,我用的是:
        str = "\r\n";
buffer1 += buffer;
buffer1 += str;
        GetDlgItem(IDC_EDIT_INFORMATION)->SetWindowText(buffer1);
将颜色的设置放到了,OnCtlColor函数中,结果输入的颜色都一样,没有变化。
怎么解决这个问题呢?

解决方案 »

  1.   

    我知道原因是因为每次都是将buffer1作为一个新字符串显示到编辑框,颜色肯定一样,怎么动态输入一行数据呢?如果在第二次输入数据时,能得到第一次输入字符串的结尾位置,问题就解决了,怎么实现呢?
      

  2.   

    要使用richedit富文本编辑控件来实现的!
      

  3.   

    这个问题我解决过
    1.首先添加richedit控件,并添加控制变量m_richdiffMerge。
    2.然后在CXXXAPP.CPP文件的InitInstance()函数里面加AfxInitRichEdit();这一句,否则你的richedit控件是不能显示的
    3.其次定义一个改变richedit控件颜色的函数
    int SetTextColor(CRichEditCtrl& the_richedit, int min, int max)
    {
        //   声明并设置要设置的类型   
        CHARFORMAT*   lpcf   =   new   CHARFORMAT;   
        lpcf->cbSize   =   sizeof(CHARFORMAT);   
        lpcf->dwMask   =   CFM_COLOR;   
        lpcf->dwEffects   =   NULL;   
        lpcf->crTextColor   =   RGB(255, 0, 0);      
        //   要改变颜色的区域   
        CHARRANGE   rg;   
        rg.cpMin   =   min;   
        rg.cpMax   =   max;     
        //   选定要改变的区域   
        the_richedit.SendMessage(EM_EXSETSEL,   0,   (LPARAM)   (CHARRANGE   FAR   *)   &rg);       
        //   改变颜色   
        HRESULT   hr   =   the_richedit.SendMessage(EM_SETCHARFORMAT,   (WPARAM)   (UINT)   SCF_SELECTION,   (LPARAM)   lpcf);   
        
        //   释放资源   
        delete   lpcf;
        return 0;
    }
    4.最后是使用这个函数来实现颜色的变化
    str = "\r\n";
    buffer1 += buffer;
    buffer1 += str;
    SetTextColor(m_richdiffMerge,buffer.GetLength(),buffer1.GetLength());
    即可
      

  4.   

    可以参考我写的vc——类似与beyondcompare工具的文本比较算法源代码的帖子,上面有相关的信息。http://blog.csdn.net/wlq5800/article/details/6558093