2016-03-28 115 views
1

我正在尋找匹配並以顏色突出顯示它們。 之後我只顯示他們。 我需要用高亮顯示的文字重新顯示整個文本。 我試圖通過std::stringstreamStreamIn + StreamOut,但顏色丟失。MFC。保存並加載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'應該可以工作。看看'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富文本:: editStreamOutCallback(DWORD_PTR dwCookie,LPBYTE pbBuff,LONG CB,LONG * PCB) { 的std :: stringstream的* RTF = reinterpret_cast的<性病:: stringstream的*>(dwCookie); rtf-> write(reinterpret_cast (pbBuff),cb); * pcb = cb; return 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; 
}