如何更改 CRichEditCtrl 中的突出显示颜色?

How could I change the highlight color in a CRichEditCtrl?

我试图捕获 EN_SelChange 事件,但它从未触发,尽管我添加了

rich->SetEventMask(rich->GetEventMask() | ENM_CHANGE | ENM_SELCHANGE);

在 OnInitDialog fxn 中。 所以我尝试在我的 OnEraseBkgnd 函数中添加以下代码。

BEdit *edit = (BEdit *)GetDlgItem(IDC_MAIN_EDIT1);
CRichEditCtrl *ctrl = &(edit->GetRichEditCtrl());
long s = 0 , e = 0;
ctrl->GetSel(s, e);

程序在 GetSel 函数上崩溃

我现在正在想办法在文本被选中时更改其突出显示颜色。

我想出了一个解决这个问题的方法。 从消息循环中捕获选择消息:

BOOL CNotepadDlg::PreTranslateMessage(MSG*   pMsg)
{
 if (pMsg->message == 514||(pMsg->message == 257 && (pMsg->wParam == 40|| pMsg->wParam == 39 || pMsg->wParam == 38 || pMsg->wParam == 37)))
{
    CString str;
    BEdit *edit = (BEdit *)GetDlgItem(IDC_MAIN_EDIT1);
    edit->GetRichEditCtrl().GetSel(start, end);
    ......
}
......
}

514为鼠标选择事件,257为键盘事件代码。 当消息为 257 时,wParam 代表触发该事件的键。 通过这种方式我们可以捕获选择事件,虽然它不够优雅...

                                                 Bill Sun