2

我试图捕捉 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 函数上崩溃了

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

4

1 回答 1

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
于 2015-04-30T14:49:50.617 回答