如何更改CRichEditCtrl中的高亮颜色?

时间:2015-04-28 17:21:19

标签: c++ colors mfc 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函数

上崩溃

我现在想办法在选择文字高亮颜色时改变一种方法。

1 个答案:

答案 0 :(得分:0)

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

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