问题已经解决,陈述如下:1、你用的不是CRichEditView,是CRichEditCtrl,所以我上面说的方法不太合适你,这两个东西还是有差别的,当是前者时,用Serialize就非常容易解决了,后者是否能用这个方法,没有研究过; 2、问题在于,你的EditStreamCallback()这个回调函数的返回值错误,MSDN中如此描述: The callback function returns a nonzero value to indicate an error. If an error occurs, the read or write operation ends and the rich edit control discards any data in the pbBuff buffer. 就是说,如果返回值是非0时,就表示调用该函数错误,停止回调并且将已经读出的数据丢弃,而你的返回语句是: if (*pcb < cb) return 0; // file has been fully read in else return (DWORD) *pcb; // more to read 当读数据正确时,返回的时读取数据的字节数,这恰好和上面的相反,所以系统认为错误,就停止读并且清空已读出的数据,所以你不出任何数据了; 3、解决方法: 在你的EditStreamCallback()只保留一个语句: return !ReadFile((HANDLE)dwCookie, pbBuff, cb, (unsigned long*)pcb, NULL); 就可以了另外说一下,你的代码规范性实在不太好,读起来很费劲啊,再加上对回调函数不熟悉,而且没有用过这些函数,所以折腾了不少时间,呵呵
2、问题在于,你的EditStreamCallback()这个回调函数的返回值错误,MSDN中如此描述:
The callback function returns a nonzero value to indicate an error. If an error occurs, the read or write operation ends and the rich edit control discards any data in the pbBuff buffer.
就是说,如果返回值是非0时,就表示调用该函数错误,停止回调并且将已经读出的数据丢弃,而你的返回语句是:
if (*pcb < cb)
return 0; // file has been fully read in
else
return (DWORD) *pcb; // more to read
当读数据正确时,返回的时读取数据的字节数,这恰好和上面的相反,所以系统认为错误,就停止读并且清空已读出的数据,所以你不出任何数据了;
3、解决方法:
在你的EditStreamCallback()只保留一个语句:
return !ReadFile((HANDLE)dwCookie, pbBuff, cb, (unsigned long*)pcb, NULL);
就可以了另外说一下,你的代码规范性实在不太好,读起来很费劲啊,再加上对回调函数不熟悉,而且没有用过这些函数,所以折腾了不少时间,呵呵