CRichEditCtrl使用时的一些注意事项

VC6里使用CRichEditCtrl时有一些需要注意的事项:

1. 必须在InitInstance()里加上AfxInitRichEdit(),包含该控件的窗体才会显示。

2. 如果需要升级使用RICHEDIT 2.0版,只需要在InitInstance()里加上LoadLibrary(“RICHED20.DLL”)即可,不过记得在ExitInstance()里调用FreeLibrary()。

3. 需要响应SELCHANGE事件时需要在OnInitDialog()使用SetEventMask()注册ENM_SELCHANGE消息,其它的也类似:
m_edt.SetEventMask(m_edt.GetEventMask() | ENM_SELCHANGE);

4. 可以使用SetTargetDevice来设置控制的Word Wrap模式:
m_edt.SetTargetDevice(NULL, 1); // 禁用Word Wrap,但内容全会在同一行上
m_edt.SetTargetDevice(NULL, 0); // 启用Word Wrap

5. 使用SetSelectionCharFormat来设置某段内容的字体颜色,其它属性也雷同:
CHARFORMAT cf;

m_edt.HideSelection(TRUE, FALSE); // 目的是在设颜色时界面不闪,设完再开启

// 下面代码是复位颜色设置,我发现后面使用SetSel以0开头时更换内容后颜色就变成一种
m_edt.SetWindowText(“”); // 考虑到复位的效率问题,先清空内容
memset(&cf, 0, sizeof(CHARFORMAT));
cf.dwMask = CFM_COLOR;
cf.dwEffects = CFE_AUTOCOLOR;
m_edt.SetSel(0, -1); // 内容清空后这里选择的内容就为空
m_edt.SetSelectionCharFormat(cf);

m_edt.SetWindowText(strContent);

cf.dwEffects = 0; // 这里一定要把前面设置的CFE_AUTOCOLOR清除
// 重复下面3行分别设置颜色
cf.crTextColor = i % 2 ? RGB(255, 0, 0) : RGB(0, 0, 255);
m_edt.SetSel(<START_POS>, <END_POS>);
m_edt.SetSelectionCharFormat(cf);

// 最后把光标移到最后然后恢复显示选中
m_edt.SetSel(-1, -1);
m_edt.HideSelection(FALSE, FALSE);

Tags:

Leave a Reply