如何更改 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
我试图捕获 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