RichEdit本身好像不带“剪切”“复制”等功能,所以自己可以派生一个RichEdit的子类,加入这些功能,例如取名“RichEditCtrlEx”。 下面是这个类的一些关键成员函数: // 叠加格式 void CRichEditCtrlEx::SetFormatRange( int nStart, int nEnd, BOOL bBold, COLORREF clr,COLORREF backclr) ... { if (nStart >= nEnd) return; SetSel(nStart, nEnd); DWORD dwEffects = bBold?CFE_BOLD:0; CHARFORMAT cfm; cfm.cbSize = sizeof(cfm); GetSelectionCharFormat(cfm); if ((cfm.dwMask & CFM_COLOR) && cfm.crTextColor == clr && (cfm.dwMask & CFM_BOLD) && (cfm.dwEffects & CFE_BOLD) == dwEffects) return; cfm.dwEffects = dwEffects; cfm.crTextColor = clr; cfm.dwMask = CFM_BOLD | CFM_COLOR; SetSelectionCharFormat(cfm); // 加入选择 HIRange hirange; hirange.rng.cpMin = nStart; hirange.rng.cpMax = nEnd; GetSelectionCharFormat(cfm); hirange.cmf = cfm; m_HiRange.Add(hirange); }