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);
}
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);
}