CRichEditCtrl 使用

初始化

BOOL CLG3200DemoApp::InitInstance()
{
AfxInitRichEdit2();
// call to initialize richedit2 library.
....
}

设置字体

CFont m_font;
CRichEditCtrl* m_pEdit;
VERIFY(m_font.CreateFont(
-12, // nHeight
0, // nWidth
0, // nEscapement
0, // nOrientation
FW_NORMAL, // nWeight
FALSE, // bItalic
FALSE, // bUnderline
0, // cStrikeOut
ANSI_CHARSET, // nCharSet GB2312_CHARSET
OUT_DEFAULT_PRECIS, // nOutPrecision
CLIP_DEFAULT_PRECIS, // nClipPrecision
DEFAULT_QUALITY, // nQuality
DEFAULT_PITCH, // nPitchAndFamily
TEXT("Consolas"))); // lpszFacenameTEXT("MS Shell Dlg 2")Courier New

m_pEdit = (CRichEditCtrl*)GetDlgItem(IDC_RICHEDIT21);
m_pEdit->SetFont(&m_font);

SendDlgItemMessage(IDC_RICHEDIT21, WM_SETFONT, (WPARAM)font.m_hObject, FALSE);

响应 ENM_CHANGE

CRichEditCtrl *pRichEdit = (CRichEditCtrl*)GetDlgItem(IDC_RICH_APDU);
pRichEdit->SetEventMask(EN_MSGFILTER | ENM_CHANGE);

替换显示文字

void CIOCPClientDlg::showTextOnce(int id, const TCHAR* str, DWORD color)
{
CHARFORMAT cfm;
cfm.cbSize = sizeof(CHARFORMAT);
SendDlgItemMessage(id, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfm);
cfm.dwEffects = ~CFE_AUTOCOLOR;
cfm.dwMask = CFM_COLOR;
cfm.crTextColor = color;
cfm.dwEffects |= CFE_BOLD; //粗体,取消用cf.dwEffects&=~CFE_BOLD;

int nLength = SendDlgItemMessage(id, WM_GETTEXTLENGTH);
SendDlgItemMessage(id, EM_SETSEL, 0, nLength);
SendDlgItemMessage(id, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfm);

SendDlgItemMessage(id, EM_REPLACESEL, 0, (LPARAM)str);
SendDlgItemMessage(id, EM_SETSEL, -1, -1);
}

#define COLOR_RED RGB(0xff,0,0)
#define COLOR_GREEN RGB(0,0xB0,0)

void CdemoDlg::showText(int id, const TCHAR* str, DWORD color)
{
CTime t = CTime::GetCurrentTime();
CString strOut = t.Format(_T("%Y-%m-%d %H:%M:%S "));
strOut += str;

CHARFORMAT cfm;
cfm.cbSize = sizeof(CHARFORMAT);
SendDlgItemMessage(id, EM_GETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfm);
cfm.dwEffects = ~CFE_AUTOCOLOR;
cfm.dwMask = CFM_COLOR;
cfm.crTextColor = color;

int nLength = SendDlgItemMessage(id, WM_GETTEXTLENGTH);
SendDlgItemMessage(id, EM_SETSEL, nLength, nLength);

SendDlgItemMessage(id, EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cfm);

CHARRANGE chRang;
chRang.cpMax = -1;
chRang.cpMin = -1;
SendDlgItemMessage(id, EM_SETCHARFORMAT, 0, (LPARAM)&chRang);
SendDlgItemMessage(id, EM_REPLACESEL, 0, (LPARAM)strOut.GetBuffer());
SendDlgItemMessage(id, WM_VSCROLL, SB_BOTTOM, 0);
}