关于RichEdit中设置和获取RTF格式时碰到的有关问题,有经验的请进

关于RichEdit中设置和获取RTF格式时碰到的问题,有经验的请进
我用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格式的内容,请问该如何实现?


------解决方案--------------------
CBStreamOut似乎有问题
DWORD CALLBACK COutLookRichEdit::CBStreamOut(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CString *psEntry = (CString*) dwCookie;


CString tmpEntry = _T( " ");
tmpEntry = (LPCTSTR)pbBuff;

*psEntry += tmpEntry.Left(cb);

return 0;
}

------解决方案--------------------
每个人看的虽然不一样,但是运行的结果应该是一样的吧
他们的设置哪儿不一样了.