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

0

У меня есть вектор, который хранит пары. Каждая пара содержит 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
    Как вы rEditCtrl.SetSel(nEnd, nEnd); весь текст с помощью этого rEditCtrl.SetSel(nEnd, nEnd); ? Вы выбираете конец в конец.
  • 0
    Нет ... это просто установка курсора в положение nEnd.
Теги:

1 ответ

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
    Какой цели это служит?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню