2016-03-28 18 views
1

Ich suche nach Übereinstimmungen und markiert sie in Farbe. Danach zeige ich nur sie an. Ich muss den gesamten Text mit markierten Wörtern erneut anzeigen. Ich habe versucht, durch std::stringstream und StreamIn + StreamOut zu tun, aber die Farbe ist verloren.MFC. Speichern und Laden von CMFCRibbonRichEditCtrl

void RichText::saveInStringstream() 
{ 
    EDITSTREAM es = { 0, 0, editStreamOutCallback }; 
    es.dwCookie = reinterpret_cast<DWORD_PTR>(&m_rtf); 
    m_richEdit.StreamOut(SF_RTF, es); 
} 


DWORD CALLBACK RichText::editStreamOutCallback(DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb) 
{ 
    std::stringstream *rtf = reinterpret_cast<std::stringstream *>(dwCookie); 
    rtf->write(reinterpret_cast<char *>(pbBuff), cb); 
    *pcb = cb; 
    return 0; 
} 
+0

'StreamOut' sollte funktionieren. Sehen Sie sich den Körper von CRichEditView :: Stream an. – ZDF

+0

Ich denke ich mache es auch. 'void RichText :: saveInStringstream() { EDITSTREAM es = {0, 0, editStreamOutCallback}; es.dwCookie = reinterpret_cast (& m_rtf); m_richEdit.StreamOut (SF_RTF, es); } '' DWORD RUECKRUF RichText- :: editStreamOutCallback (DWORD_PTR dwCookie, LPBYTE pbBuff, LONG cb, LONG * pcb) { std :: string * rtf = reinterpret_cast (dwCookie); rtf-> schreiben (reinterpret_cast (pbBuff), cb); * pcb = cb; Rückgabe 0; } ' Aber der Quelltext bleibt im Stream. –

+0

Es ist unmöglich, so viel Code in Kommentaren zu lesen. Bitte klicken Sie auf den Bearbeiten-Button und fügen Sie diese Informationen in Ihre Frage ein. –

Antwort

0

Ich fand immer noch eine Lösung, aber mit 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; 
} 
Verwandte Themen