2016-03-28 2 views
1

Я ищу совпадения и выделяет их по цвету. После этого я показываю только их. Мне нужно повторно отобразить весь текст выделенными словами. Я попытался сделать через std::stringstream и StreamIn + StreamOut, но цвет утерян.MFC. Сохранение и загрузка CMFCRibbonRichEditCtrl

+0

'StreamOut' должен работать. Посмотрите на тело CRichEditView :: Stream. – ZDF

+0

Думаю, я тоже. 'void RichText :: saveInStringstream() { EDITSTREAM es = {0, 0, editStreamOutCallback}; es.dwCookie = reinterpret_cast (& m_rtf); m_richEdit.StreamOut (SF_RTF, es); } '' типа DWORD CALLBACK RichText :: editStreamOutCallback (DWORD_PTR dwCookie, LPBYTE pbBuff, LONG CB, LONG * печатной платы) { станд :: stringstream * = reinterpret_cast РТФ <станд :: stringstream *> (dwCookie); rtf-> write (reinterpret_cast (pbBuff), cb); * pcb = cb; возвращение 0; } ' Но исходный текст остается в потоке. –

+0

Невозможно прочитать этот код в комментариях. Нажмите кнопку «Изменить» и включите эту информацию в свой вопрос. –

ответ

0

Я все еще нашел решение, но использовал CMemFile.

void RichStream::Save(CMFCRibbonRichEditCtrl &richEdit) 
{  
    file.SeekToBegin(); 

    EDITSTREAM es = { 0, 0, editStreamOutCallback }; 
    es.dwCookie = reinterpret_cast<DWORD_PTR>(&file); 

    richEdit.StreamOut(SF_RTF, es);  
} 

void RichStream::Load(CMFCRibbonRichEditCtrl &richEdit) 
{ 
    file.SeekToBegin(); 

    EDITSTREAM es = { 0, 0, editStreamInCallback }; 
    es.dwCookie = reinterpret_cast<DWORD_PTR>(&file);  

    richEdit.StreamIn(SF_RTF, es); 
} 

DWORD CALLBACK RichStream::editStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) 
{ 
    CMemFile* pFile = (CMemFile*)dwCookie; 

    pFile->Write(pbBuff, cb); 

    *pcb = cb; 

    return 0; 
} 

DWORD CALLBACK RichStream::editStreamInCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) 
{ 
    CMemFile* pFile = (CMemFile*)dwCookie; 

    *pcb = pFile->Read(pbBuff, cb); 

    return 0; 
} 
Смежные вопросы