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

Решение

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

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
Другие вопросы по тегам