巨痛苦!百万条记录在CRichEditCtrl中显示的问题求解。工程描述:
一个对话框,上面有3个RichEdit控件,显示查询结果。要求对某些字串着色显示,用了RTF。Unicode工程,VS2010环境。
查询结果保存在CStringArray中,最多的时候每个RichEdit都要输出100万条记录,每条记录文字也较多。问题:
最初用的SetSel和ReplaceSel,很慢很慢,闪烁。后来加了SetRedraw,效果不明显。放弃。
改用StreamIn,先把结果存在临时文件中(RTF),然后一次性StreamIn。临时文件最大时有30M,大大超过了pcb buffer(4K)的值,回调函数只好每次StreamIn最大buffer值,循环读取。效果有所改善。
问题来了,由于有多个RichEdit,每次输出,竟然只能显示出第1个RichEdit的内容,第2个和第3个都不显示。仔细检查了代码,怀疑是回调函数的问题。又为每个RichEdit的StreamIn创建名称不同但内容相同的回调函数,问题依旧。求解:
(1)为什么只能显示一个RichEdit的内容?
(2)如果不采取空间换时间的策略,还有没有其他的替代方案?恳求解答!谢谢。
一个对话框,上面有3个RichEdit控件,显示查询结果。要求对某些字串着色显示,用了RTF。Unicode工程,VS2010环境。
查询结果保存在CStringArray中,最多的时候每个RichEdit都要输出100万条记录,每条记录文字也较多。问题:
最初用的SetSel和ReplaceSel,很慢很慢,闪烁。后来加了SetRedraw,效果不明显。放弃。
改用StreamIn,先把结果存在临时文件中(RTF),然后一次性StreamIn。临时文件最大时有30M,大大超过了pcb buffer(4K)的值,回调函数只好每次StreamIn最大buffer值,循环读取。效果有所改善。
问题来了,由于有多个RichEdit,每次输出,竟然只能显示出第1个RichEdit的内容,第2个和第3个都不显示。仔细检查了代码,怀疑是回调函数的问题。又为每个RichEdit的StreamIn创建名称不同但内容相同的回调函数,问题依旧。求解:
(1)为什么只能显示一个RichEdit的内容?
(2)如果不采取空间换时间的策略,还有没有其他的替代方案?恳求解答!谢谢。
List控件方便着色吗?(用得很少。)
我相信没有人会看完100万条记录或者找一个控件,能支持RTF,还有只绘制当前显示区域Rect的内容,不全部都绘制的
你搜个GridCtrl,着色很方便的,RichEdit效率相对来说有点低下了
至于多个RichEdit不显示的问题,为每个派生一个类就好了。
谢谢各位!