注意:MFC中使用RichEdit控件时需要在RichEditUse.cpp文件中的InitInstance()函数中添加初始化函数AfxInitRichEdit2();
1、RichEdit控件简单应用
为方便演示本例创建RichContrl基于对话框,生成CRichContrlDlg.h和CRichContrlDlg.cpp两个文件,在.cpp文件中宏定义:
#define COLOR_BLUE RGB(0, 0, 128) #define COLOR_RED RGB(0xFF, 0, 0) #define COLOR_GREEN RGB(0x2e, 0x8b, 0x57) #define COLOR_WHITE RGB(255, 255, 255) #define COLOR_BLACK RGB(0, 0, 0) #define COLOR_YELLOW RGB(250, 250, 60)
从工具箱中拖拽richedit控件、editcontrl控件、按钮到对话框中,ID分别为IDC_RICHEDIT_SHOW、IDC_EDIT_INPUT,然后在CRichContrlDlg.h中申明函数void DrawTextToREdit(CString szMessage, UINT uiREditId, COLORREF crTextCr, COLORREF crBackCr, int nFontSize);返回CRichContrlDlg.cpp实现函数DrawTextToREdit()如下:
1 void CRichContrlDlg::DrawTextToREdit(CString szMessage, UINT uiREditId, COLORREF crTextCr, COLORREF crBackCr, int nFontSize) 2 { 3 CRichEditCtrl* pREdit = (CRichEditCtrl*)this->GetDlgItem(uiREditId); 4 CFont font; 5 font.CreateFont( 6 nFontSize, //字体的高度 7 0, //字体的宽度 8 0, //字体的倾斜角 9 0, //字体的倾斜角 10 FW_LIGHT, //字体的粗细 11 FALSE, //字体是否为斜体 12 FALSE, //字体是否为下划线 13 FALSE, //字体是否有删除线 14 ANSI_CHARSET, //字体使用的字符集 15 OUT_TT_PRECIS, //指定如何选择合适的字体 16 CLIP_DEFAULT_PRECIS, //用来确定裁剪的精度 17 PROOF_QUALITY, //怎么样跟选择的字体相符合 18 FF_MODERN | FIXED_PITCH,//距标志和属性标志 19 _T("楷体") //字体的名称 20 ); 21 this->GetDlgItem(uiREditId)->SetFont(&font); 22 pREdit->SetBackgroundColor(FALSE, crBackCr); 23 CHARFORMAT cf; 24 ::memset(&cf, 0, sizeof(cf)); 25 cf.dwMask = CFM_COLOR | CFM_BOLD; 26 cf.dwEffects = CFE_BOLD; 27 cf.crTextColor = crTextCr; 28 pREdit->SetDefaultCharFormat(cf); 29 this->SetDlgItemText(uiREditId, szMessage); 30 }
给按钮添加事件处理程序,调用DrawTextToREdit()函数:
void CRichContrlDlg::OnBnClickedButton1() { // TODO: 在此添加控件通知处理程序代码 CString input_str; this->GetDlgItemText(IDC_EDIT_INPUT, input_str); DrawTextToREdit(input_str, IDC_RICHEDIT_SHOW, COLOR_WHITE, COLOR_GREEN, 120); }
效果截图:
2、RichEdit控件和Check控件结合使用
新建一个基于对话框的MFC程序,工具箱中拖拽三个复选框控件、richedit控件、按钮控件到对话框中,并在CRichEditUseDlg.h文件中添加控件变量,如下所示:
public: afx_msg void OnTextColor(); afx_msg void OnBold(); afx_msg void OnItalic(); afx_msg void OnUnderline(); CRichEditCtrl m_RichSample; //RichEdit控件变量 CButton m_ctlBold; //粗体复选框 CButton m_ctlItalic; //斜体复选框 CButton m_ctlUnderline; //下划线复选框
接下来在CRichEditUseDlg.cpp文件中分别给各个控件添加事件处理函数:
1 //按钮的事件处理函数 2 void CRichEditUseDlg::OnTextColor() 3 { 4 // TODO: 在此添加控件通知处理程序代码 5 CHARFORMAT cf; 6 memset(&cf, '