typedef struct _charformat {
UINT cbSize;
DWORD dwMask;
DWORD dwEffects;
LONG yHeight;
LONG yOffset;
COLORREF crTextColor;
BYTE bCharSet;
BYTE bPitchAndFamily;
TCHAR szFaceName[LF_FACESIZE];
} CHARFORMAT;
cbSize
Type: UINT
指定结构的大小,以字节为单位。在将结构传递给富编辑控件之前,必须设置此成员。
设置一:
CHARFORMAT cf;
ZeroMemory(&cf, sizeof(CHARFORMAT));
cf.cbSize = sizeof(CHARFORMAT);
设置二:
CHARFORMAT cf={sizeof(cf)};
dwMask
相当于总阀 线路连接到房间的电灯 要使用灯还需要 打开房间内的 开关
如果总阀上没有线路 房间内装上开关 也是无效的如 dwEffects 这个设置
Type: DWORD
包含要设置的有效信息或属性的成员。该成员可以是以下值中的0、1或多个。
CFM_ALL == CFM_EFFECTS | CFM_SIZE | CFM_FACE |CFM_OFFSET | CFM_CHARSET
CFM_BOLD 生效粗体;
CFM_CHARSET 使成员 bCharSet 生效;
CFM_COLOR crTextColor 和 CFE_AUTOCOLOR 生效 cf.crTextColor = RGB(0, 0, 255);
CFM_EFFECTS ===CFM_BOLD | CFM_ITALIC | CFM_UNDERLINE | CFM_COLOR | CFM_STRIKEOUT | CFE_PROTECTED | CFM_LINK
CFM_FACE 生效szFaceName _tcscpy_s(cf.szFaceName, “宋体”);
CFM_ITALIC 这宏的值使CFM_EFFECTS 生效
CFM_OFFSET 使yOffset 生效
CFM_PROTECTED dwEffects 的成员 CFE_PROTECTED 是有效的
CFM_SIZE yHeight 这个成员生效 cf.yHeight = 180;
CFM_STRIKEOUT dwEffects 的成员 CFM_STRIKEOUT 是有效的 字体增加删除线
CFM_UNDERLINE. dwEffects 的成员 CFE_UNDERLINE 是有效的 字体下面增加下划线
dwEffects
Type: DWORD
字体特效。这个成员可以是下列的组合值
CFE_AUTOCOLOR 这文本颜色是 GetSysColor(COLOR_WINDOWTEXT) 的返回值
CFE_BOLD 字体加粗
CFE_DISABLED RichEdit 2.0及以后版本:字符的阴影会偏移3/4点或1个像素,以较大的像素显示。
CFE_ITALIC 字体是斜体的
CFE_STRIKEOUT Characters are struck.
CFE_PROTECTED 受保护的字体 尝试去修改 会收到 受保护通知码 (EN_PROTECTED)
EN_PROTECTED
penProtected = (ENPROTECTED *) lParam;
yHeight
Type: LONG
字体高度, in twips (1/1440 of an inch or 1/20 of a printer’s point).
yOffset
Type: LONG
字符偏移量,在twips中,从基线开始! 如果这个成员的值是正的,字体是上标的 ,如果是符数 字体是下标的。
crTextColor
Type: COLORREF
文本的颜色。如果指定了CFE_AUTOCOLOR字符效果,则忽略该成员。要生成COLORREF,使用RGB宏。
bCharSet
Type: BYTE
字符集的值。bCharSet成员可以是为LOGFONT结构的lfCharSet成员指定的值之一。Microsoft Rich Edit 3.0可能会覆盖这个值,如果它对目标字符无效。
bPitchAndFamily
Type: BYTE
字体家族和音高。该成员与LOGFONT结构体的lfPitchAndFamily成员相同。
要关闭格式化属性,请在dwMask中设置适当的值,但不要在dweeffects中设置相应的值。例如,要关闭斜体,可以设置CFM_ITALIC,但不设置CFE_ITALIC。。
BOOL Cdemo2App::InitInstance()
{
// TODO: call AfxInitRichEdit2() to initialize richedit2 library.\n"
AfxInitRichEdit();
Cdemo2Dlg dlg;
dlg.DoModal();
return FALSE;
}
BOOL Cdemo2Dlg::OnInitDialog()
{
CDialogEx::OnInitDialog();
// Set the icon for this dialog. The framework does this automatically
// when the application's main window is not a dialog
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
// TODO: Add extra initialization here
CHARFORMAT cf = { sizeof(cf) };
cf.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE | CFM_BOLD;
cf.crTextColor = RGB(0, 255, 0);
cf.yHeight = 240;
_tcscpy_s(cf.szFaceName, "隶书");
m_hist.SetDefaultCharFormat(cf);
m_hist.SetWindowText("【系统】欢迎进入LQM聊天室");
//追加文字
int nLen = m_hist.GetTextLength();
m_hist.SetSel(-1, -1);
m_hist.ReplaceSel("\r\n【提醒】警惕聊托,骗子,请勿透露联系方式!");
//选择追加文字并设置字体
cf.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE | CFM_BOLD | CFM_UNDERLINE;
cf.dwEffects = CFE_UNDERLINE;
_tcscpy_s(cf.szFaceName, "宋体");
cf.yHeight = 180;
cf.crTextColor = RGB(255, 0, 0);
m_hist.SetSel(nLen-6, -1);
m_hist.SetWordCharFormat(cf);
m_hist.SetSel(-1, -1);
return TRUE; // return TRUE unless you set the focus to a control
}
void Cdemo2Dlg::OnBnClickedOk()
{
// TODO: Add your control notification handler code here
//CDialogEx::OnOK();
CHARFORMAT cf = { sizeof(cf) };
cf.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE | CFM_BOLD;
cf.crTextColor = RGB(255, 0, 255);
cf.yHeight = 280;
_tcscpy_s(cf.szFaceName, "隶书");
int nLen = m_hist.GetTextLength();
m_hist.SetSel(-1, -1);
m_hist.ReplaceSel(_T("\r\n你对XXX说:"));
m_hist.SetSel(nLen, -1);
m_hist.SetSelectionCharFormat(cf);
//追加聊托内容并设置格式
nLen = m_hist.GetTextLength();
CString szText;
GetDlgItemText(IDC_INPUT, szText);
m_hist.SetSel(-1, -1);
m_hist.ReplaceSel("\r\n" + szText);
cf.dwMask = CFM_COLOR | CFM_FACE | CFM_SIZE | CFM_UNDERLINE;
cf.crTextColor = RGB(0, 0, 255);
cf.yHeight = 180;
_tcscpy_s(cf.szFaceName, "宋体");
m_hist.SetSel(nLen, -1);
m_hist.SetSelectionCharFormat(cf);
m_hist.SetSel(-1, -1);
SetDlgItemText(IDC_INPUT, NULL);
}