Как я могу изменить цвет подсветки в 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

Сейчас я выясняю один способ изменить цвет подсветки текста, когда он выделен.

2

Решение

Я нашел один способ решить эту проблему.
Поймать сообщение выбора из цикла сообщений:

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
0

Другие решения


По вопросам рекламы ammmcru@yandex.ru
Adblock
detector