RichEditctrl如何读取文件的部分数据? 本帖最后由 ziyuanxiazai123 于 2012-02-28 19:54:36 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 谢谢 我理解你说的seek文件指针方法 我在上面提到了如果利用文件指针读取一部分数据 不是利用回调函数读取一部分 那样会耗费时间 回调函数的特点 我感觉就是一读就全部读完 不能停下除非错误或文件结束利用回调函数EditStreamCallback循环调用时,它并不停下来,一切都是有空间本身控制 用户没有多大自由定制这个回调函数 怎么在适当时候结束回调函数呢? 我最终找到的两种方法如下:方法一long CRichEditCtrlEx::StreamIn(CString &str){ if(!str.IsEmpty()) { EDITSTREAM es; es.dwCookie =(DWORD)&str; es.pfnCallback = StreamInCallback; return CRichEditCtrl::StreamIn(SF_TEXT, es); } else return 0;}DWORD CALLBACK CRichEditCtrlEx::StreamInCallback(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;}方法二:long CRichEditCtrlEx::StreamIn(CString &str){ if(!str.IsEmpty()) { SetSel(0, -1); ReplaceSel(str); return str.GetLength(); } else return 0;}以上方法可用,但不一定是最好的。 鼠标滚动轮事件 64位的问题 英语好的能翻译下吗? 如果你安装了Maxthon并且拥有建行个人网上银行帐号,那你进来吧! HOOK send函数应挂接哪个 dll 文件??? 请问用Win32 API编程与用MFC编程的区别和联系。谢谢了。 怎么制作插件程序?制作插件的步骤与做DLL的一样么? 急,请问VARIANT的DATE类型怎么转换为string????!怎么给Dec类型赋值啊????! 一个关于RTTi(运行时类型识别)的基本问题???是基础问题?? 数万元寻求项目合作 SendDlgItemMessage怎么用 CRichEdit打印问题
回调函数的特点 我感觉就是一读就全部读完 不能停下除非错误或文件结束
利用回调函数EditStreamCallback循环调用时,它并不停下来,一切都是有空间本身控制 用户没有多大自由定制这个回调函数
怎么在适当时候结束回调函数呢?
方法一
long CRichEditCtrlEx::StreamIn(CString &str)
{
if(!str.IsEmpty())
{
EDITSTREAM es;
es.dwCookie =(DWORD)&str;
es.pfnCallback = StreamInCallback;
return CRichEditCtrl::StreamIn(SF_TEXT, es);
}
else
return 0;
}
DWORD CALLBACK CRichEditCtrlEx::StreamInCallback(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;
}
方法二:
long CRichEditCtrlEx::StreamIn(CString &str)
{
if(!str.IsEmpty())
{
SetSel(0, -1);
ReplaceSel(str);
return str.GetLength();
}
else
return 0;
}
以上方法可用,但不一定是最好的。