主题:SOUI向richedit插入有色文字

admin 2018年12月08日 75

主要代码如下: 

刚开始的想法是在插入之前获取文本长度,插入之后再获取一次,理论上这两个位置就是插入的开始和结束位置。但是坑爹的微软不会让你那么容易。。。因为获取的时候换行符是/r/n。但是它自己在内部是只有/n的。也就是说每多一行,获取的实际位置就会多1。。。。


void CMainDlg::OntLog(LPCTSTR pszLog,COLORREF color)
{
        CHARFORMAT2W cf;
        cf.cbSize = sizeof(cf);
        // 选中结尾处
        m_pEtScanLog->SetSel(-1);
        DWORD start,end;
        //开始位置获取
        m_pEtScanLog->SSendMessage(EM_GETSEL,(WPARAM)&start);
        m_pEtScanLog->ReplaceSel(pszLog);
        //结束位置获取
        m_pEtScanLog->SSendMessage(EM_GETSEL, NULL,(LPARAM)&end);
        m_pEtScanLog->SSendMessage(EM_GETCHARFORMAT, SCF_DEFAULT, (LPARAM)&cf);
        cf.crTextColor = color & 0x00ffffff;
        m_pEtScanLog->SetSel(MAKELONG(start,end));
        m_pEtScanLog->SSendMessage(EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf);
        //滚动动最后位置
        m_pEtScanLog->SSendMessage(WM_VSCROLL, SB_BOTTOM, 0);
}