2016-03-28 12 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は<はstd ::に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; 
} 
関連する問題