RichEditCtrl помещает события раскраски и выделения в стек отмены

В диалоге MFC у меня есть RichEditCtrl (2.0). Давайте предположим, что я хочу выделить каждый 1 в текстовом поле. Поэтому в диалоговом классе я слушаю сообщение ctrl EN_CHANGE и вызываю следующую функцию

void CParentDlg::OnEnChange()
{
CHARRANGE sel;
mRichEdit.GetSel(sel);

CHARFORMAT2 numCharFormat;
mRichEdit.GetDefaultCharFormat(numCharFormat);
numCharFormat.dwMask |= CFM_COLOR;
numCharFormat.dwEffects &= ~CFE_AUTOCOLOR;
numCharFormat.crTextColor = RGB(0, 255, 0);

CHARFORMAT2 defaultCharFormat;
mRichEdit.GetDefaultCharFormat(defaultCharFormat);CString text;
mRichEdit.GetWindowText(text);
for (int i = 0; i < text.GetLength(); ++i)
{
wchar_t c = text[i];
CHARRANGE cR = { i, i + 1 };
mRichEdit.SetSel(cR);
if (c == L'1')
{
mRichEdit.SetWordCharFormat(numCharFormat);
}
else
{
mRichEdit.SetWordCharFormat(defaultCharFormat);
}
}

mRichEdit.SetSel(sel);
}

Здесь mRichEdit является членом CRichEditCtrl CParentDlg.
Окраска отлично работает.

Проблема в том, что все промежуточные выделения и раскраски помещаются в стек отмены. При нажатии Ctrl + Z удаляется не последняя буква, а последний выбранный цвет или цвет.

Можно ли игнорировать выделения и раскраски для стека отмены? Или я должен реализовать стек отмены сам?

Текстовый режим элемента управления равен 42 (sic!), Т.е. TM_RICHTEXT | TM_MULTILEVELUNDO | TM_MULTICODEPAGE

2

Решение

Задача ещё не решена.

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


По вопросам рекламы [email protected]