我们在开发一个软件时经产需要输出一些文字或者告警,微软的MFC类库中为我们提供了功能强大的CEdit,可以让开发人员们简单的实现这一功能,但有时觉得CEdit的功能好像并不那么强大,比如我们想对输出的文字中的某一部分单独控制,改变其字体或颜色。于是CRichEditCtrl就显现出了他功能强大的一面。
那我们该如何使用CRichEditCtrl来实现我们的目的呢?
首先我们需要定义一个CRichEditCtrl的对象/或者从CRichEditView派生一个类,用来完成这一功能,用它的成员函数Creat创建一个RichEdit实体,具体请查看MSDN,下面举一个小的例子:
CRichEditCtrl m_rich;
m_rich.Create(ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN |
WS_CHILD | WS_VISIBLE | WS_VSCROLL, rect, this, 1);
CHARFORMAT cf;
cf.dwEffects = 0
cf.crTextColor = RGB(255, 0, 0);
m_rich.SetDefaultCharFormat(cf);
m_rich.Create(ES_AUTOVSCROLL | ES_MULTILINE | ES_WANTRETURN |
WS_CHILD | WS_VISIBLE | WS_VSCROLL, rect, this, 1);
CHARFORMAT cf;
cf.dwEffects = 0
cf.crTextColor = RGB(255, 0, 0);
m_rich.SetDefaultCharFormat(cf);
用下面的代码实现我们的功能
CHARFORMAT m_cfDefault;//自定义字符格式
memset(&m_cfDefault, 0, sizeof(m_cfDefault));
m_cfDefault.cbSize = sizeof(CHARFORMAT);
m_cfDefault.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_STRIKEOUT | CFM_UNDERLINE;
m_cfDefault.crTextColor = RGB(0, 0, 0);//颜色
_tcscpy(m_cfDefault.szFaceName, _T("宋体"));//字体
m_cfDefault.bPitchAndFamily = FF_SWISS;
m_cfDefault.yHeight = 200;
CRichEditCtrl* pmyRichEditCtrl;
long nStart = 0;
long nEnd = pmyRichEditCtrl->GetTextLength();
m_pmyRichEditCtrl->SetSel(nStart, nEnd);
pmyRichEditCtrl->SetSelectionCharFormat(m_cfDefault);
memset(&m_cfDefault, 0, sizeof(m_cfDefault));
m_cfDefault.cbSize = sizeof(CHARFORMAT);
m_cfDefault.dwMask = CFM_BOLD | CFM_COLOR | CFM_FACE | CFM_ITALIC | CFM_SIZE | CFM_STRIKEOUT | CFM_UNDERLINE;
m_cfDefault.crTextColor = RGB(0, 0, 0);//颜色
_tcscpy(m_cfDefault.szFaceName, _T("宋体"));//字体
m_cfDefault.bPitchAndFamily = FF_SWISS;
m_cfDefault.yHeight = 200;
CRichEditCtrl* pmyRichEditCtrl;
long nStart = 0;
long nEnd = pmyRichEditCtrl->GetTextLength();
m_pmyRichEditCtrl->SetSel(nStart, nEnd);
pmyRichEditCtrl->SetSelectionCharFormat(m_cfDefault);
在使用CRichEditCtrl/CRichEditView时请注意,首先要在应用程序类中的InitInstance方法中用AfxInitRich初始化RichEdit,或许你还不能通过编译,请在包含头文件afxrich.h。