我用SetRTF函数对RICHEDIT设置了RTF文本,但设置完后用GetRTF查看时获得的RTF文本和设置的不完全一致。
以下是SetRTF和GetRTF的实现void COutLookRichEdit::SetRTF(CString sRTF)
{
EDITSTREAM es;
es.dwError = 0;
es.pfnCallback = CBStreamIn;
es.dwCookie = (DWORD) &sRTF;
StreamIn(SF_RTF, es); // Do it.
}DWORD CALLBACK COutLookRichEdit::CBStreamIn(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CString *pstr = (CString *) dwCookie; if (pstr->GetLength() < cb)
{
*pcb = pstr->GetLength();
memcpy(pbBuff, (LPCSTR) *pstr, *pcb);
pstr->Empty();
}
else
{
*pcb = cb;
memcpy(pbBuff, (LPCSTR) *pstr, *pcb);
*pstr = pstr->Right(pstr->GetLength() - cb);
}
return 0;
}CString COutLookRichEdit::GetRTF()
{
CString sRTF;
EDITSTREAM es;
es.dwError = 0;
es.pfnCallback = CBStreamOut;
es.dwCookie = (DWORD) &sRTF;
StreamOut(SF_RTF| SFF_SELECTION, es); // Do it.
return sRTF;
}DWORD CALLBACK COutLookRichEdit::CBStreamOut(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CString *psEntry = (CString*) dwCookie;
CString tmpEntry = _T("");
tmpEntry = (CString) pbBuff; *psEntry += tmpEntry.Left(cb); return 0;
}RTF格式的字符串如下:
RICHEDIT中原始的RTF串: {\rtf1\ansi\ansicpg932\deff0\deflang1033\deflangfe1041{\fonttbl{\f0\fswiss\fprq2\fcharset0 MS Sans Serif;}}
\viewkind4\uc1\pard\lang1041\f0\fs17 
\par }设置的RTF串:{\rtf1\ansi\deff0\deftab720{\fonttbl{\f0\fswiss MS Sans Serif;}{\f1\froman\fcharset2 Symbol;}{\f2\froman Times New Roman;}{\f3\fswiss Arial;}}{\colortbl\red0\green0\blue0;\red0\green0\blue255;}\deflang1033\pard\plain\f2\fs20 Click  \plain\f2\fs20\cf1\ul here\plain\f2\fs20  to see the about box.}设置完后用GetRTF读取出来的RTF串: {\rtf1\ansi\deff0\deflang1033{\fonttbl{\f0\froman Times New Roman;}}
{\colortbl ;\red0\green0\blue255;}
\viewkind4\uc1\pard\f0\fs20 Click  \cf1\ul here\cf0\ulnone  to see the about box.
\par }
问题:
1) 为什么设置后读取出来的RTF串和设置串不完全一致?
2) 我如果想往RICHEDIT中插入一段RTF格式的内容,请问该如何实现?