Вывести отформатированный текст на экран

У меня есть вектор, который хранит пары. Каждая пара содержит CString и bool.
Если CString предназначен для подчеркивания, то bool — это true, иначе — false.

Я хочу вывести текст в векторе на экран, убедившись, что текст подчеркнут в правильных местах.

Пока у меня есть следующий код:

void CEmergenceView::AppendText( CString msg ) {
int nBegin;
CRichEditCtrl &rec = GetRichEditCtrl();
nBegin = rec.GetTextLength();
rec.SetSel(nBegin, nBegin);   // Select last character
rec.ReplaceSel(msg);          // Append, move cursor to end of text
rec.SetSel(-1,0);             // Remove Black selection bars
nBegin = rec.GetTextLength(); // Get New Length
rec.SetSel(nBegin,nBegin);    // Cursor to End of new text
// Fix annoying "do you want to save your changes?" when program exits
GetDocument()->SetModifiedFlag(FALSE); // -Optional- (sometimes you want this)
}

int nEnd = 0;

// loop through start of text to end of text
for(int k = 0; k < groups.size(); k++) {
rEditCtrl.SetSel(nEnd, nEnd);
rEditCtrl.GetSelectionCharFormat(cf);
if(groups.at(k).second) {
if(!cf.dwEffects & !CFE_UNDERLINE) {
CRichEditView::OnCharUnderline();
}
}
else if(!groups.at(k).second) {
if(cf.dwEffects & CFE_UNDERLINE) {
CRichEditView::OnCharUnderline();
}
}
AppendText(groups.at(k).first);
nEnd = nEnd + (groups.at(k).first.GetLength());
}

Тем не менее, это вовсе не подчеркивает …. Может кто-нибудь сказать мне, что я делаю не так ?? Спасибо!

0

Решение

Я думаю, что вы должны реализовать OnCharUnderline

Попробуйте вызвать свою собственную функцию вместо функции по умолчанию:

Вы можете получить это от Вот:

void CMyRichEditView::OnCharUnderline ()
{
CHARFORMAT2 cf;
cf = GetCharFormatSelection();

if (!(cf.dwMask & CFM_UNDERLINE) || !(cf.dwEffects & CFE_UNDERLINE))
cf.dwEffects = CFE_UNDERLINE;
else
cf.dwEffects = 0;

cf.dwMask = CFM_UNDERLINE;
SetCharFormat(cf);
}
0

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

Других решений пока нет …

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