我试图捕获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函数
上崩溃我现在想办法在选择文字高亮颜色时改变一种方法。
答案 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