richedit的问题,回显

kevin0808 2009-07-15 04:36:15
// CMyRichEdit 消息处理程序

DWORD CALLBACK CMyRichEdit::MyStreamOutCallback(DWORD dwCookie,
LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;
pFile->Read(pbBuff, cb);
*pcb = cb;
return 0;
}

void CMyRichEdit::GetRtf()
{
CFile cFile(TEXT(TMP_RTF), CFile::modeReadWrite | CFile::typeBinary |CFile::shareDenyNone);
EDITSTREAM es;
es.dwError = 0;
es.pfnCallback = MyStreamOutCallback;
es.dwCookie = (DWORD)&cFile;
StreamIn(SF_RTF, es);
cFile.Close();
}

代码如上,调试过程:在回调函数中,read后,pbbuff中已经能够看到rtf文件中读取出的内容了,但是结果界面上却没有任何显示?
请高手帮忙,谢谢
...全文
56 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
spring203 2009-07-17
  • 打赏
  • 举报
回复
"呵呵,我的回调函数好像和你的没有什么区别,无非是名字不同拉=。="
------------------------------------------------------------------
贴这个代码前, 我特地查过,这个例子里面的代码是msdn例程, 有点区别 *pcb = pFile->Read(pbBuff, cb); 与 *pcb = cb;
这是CFile read返回值描述!
The number of bytes transferred to the buffer. Note that for all CFile classes, the return value may be less than nCount if the end of file was reached.

说明在有的情况下(读到文件末尾时)还是不一样的!至于在你的程序中是不是一样,我还不能肯定,毕竟只有2段代码片段,不能妄下结论,

PS:我在1楼描述的也是一个负责任的提醒, "除非你能保证在GetRtf()已经把内容写进richedit了" ---- 事实上的确如此,我仔细查MFC的RICHEDIT,StreamIn(SF_RTF, es)就是干了这个,虽然证明了没问题,但我的描述还是正确的,所以也没什么不妥!
kevin0808 2009-07-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 spring203 的回复:]
static DWORD CALLBACK
MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;

*pcb = pFile->Read(pbBuff, cb);

return 0;
}
[/Quote]

呵呵,我的回调函数好像和你的没有什么区别,无非是名字不同拉=。=
spring203 2009-07-16
  • 打赏
  • 举报
回复
static DWORD CALLBACK
MyStreamInCallback(DWORD dwCookie, LPBYTE pbBuff, LONG cb, LONG *pcb)
{
CFile* pFile = (CFile*) dwCookie;

*pcb = pFile->Read(pbBuff, cb);

return 0;
}
kevin0808 2009-07-16
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 spring203 的回复:]
你这个es.dwCookie = (DWORD)&cFile; 这里是临时变量呀!生命周期在函数体内,GetRtf() 跑完了就没了,除非你能保证在GetRtf()已经把内容写进richedit了!
[/Quote]

MyStreamOutCallback回调函数,会在StreamIn(SF_RTF, es); 后被调用,所以在执行回调函数的时候,cFile当然不会被销毁
并且回调函数pFile->Read(pbBuff, cb); 执行以后,pbbuff中已经被填充了正确的值了
spring203 2009-07-15
  • 打赏
  • 举报
回复
你这个es.dwCookie = (DWORD)&cFile; 这里是临时变量呀!生命周期在函数体内,GetRtf() 跑完了就没了,除非你能保证在GetRtf()已经把内容写进richedit了!

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧