1、设置RichEdit客户区的背景颜色
要设置RichEdit的背景色,需要发送 EM_SETBKGNDCOLOR 消息给RichEdit控件,关于该消息的说明:wParam参数 为颜色选项,如果是0,说明使用 lParam参数 中的颜色值作为背景色;如果该参数不为0,则使用系统背景色。因为我们要发送该消息来改变背景色,所以我们必须将wParam设置为0,将lParam设置为指定的颜色,即
- ::SendMessage( m_richEditCtrl.GetSafeHandle(), 0, (LPARAM)RGB(0,128,192) );
2、设置RichEdit指定区域的文字颜色及字体
将使用到CHARFORMAT结构体中的yHeight、szFaceName、crTextColor等字段,相关代码如下所示:
- void CRichEditCtrlEx::SetTextFontColor( const LOGFONT& font,COLORREF color )
- {
- CHARFORMAT cf;
- memset( &cf, 0, sizeof(CHARFORMAT) );
- GetDefaultCharFormat(cf);
- // 设置相关字体属性
- if(font.lfWeight == FW_BOLD)
- {
- cf.dwEffects |= CFE_BOLD;
- }
- else
- {
- cf.dwEffects &= ~(CFE_BOLD);
- }
- if(font.lfItalic)
- {
- cf.dwEffects |= CFE_ITALIC;
- }
- else
- {
- cf.dwEffects &= ~(CFE_ITALIC);
- }
- if(font.lfUnderline)
- {
- cf.dwEffects |= CFE_UNDERLINE;
- }
- else
- {
- cf.dwEffects &= ~(CFE_UNDERLINE);
- }
- if(font.lfStrikeOut)
- {
- cf.dwEffects |= CFE_STRIKEOUT;
- }
- else
- {
- cf.dwEffects &= ~(CFE_STRIKEOUT);
- }
- cf.yHeight = 20*font.lfHeight;
- cf.bPitchAndFamily = font.lfPitchAndFamily;
- strcpy(cf.szFaceName,font.lfFaceName);
- cf.dwEffects ^= CFE_AUTOCOLOR;
- cf.crTextColor = color;
- // 为将要输入的内容设定字体
- SetWordCharFormat(cf);
- }
3、改变RichEdit指定区域的文字背景颜色
这需要使用到CHARFORMAT2结构体,主要使用到结构体中的crBackColor字段。
- CHARFORMAT2 cf;
- memset( &cf, sizeof(CHARFORMAT2) );
- cf.cbSize = sizeof(CHARFORMAT2);
- cf.dwMask = CFM_BACKCOLOR; // 使crBackColor字段有效
- cf.crBackColor = RGB(0, 255, 0); // 背景颜色为绿色
- m_richEditCtrl.SetSel( lStart, lEnd ); // 选中区域文字
- m_richEditCtrl.SendMessage( EM_SETCHARFORMAT, SCF_SELECTION, (LPARAM)&cf );