TRichEdit的内部绘制方式(100分)

K

kthy

Unregistered / Unconfirmed
GUEST, unregistred user!
一直在想,在RichEdit控件内部,微软是怎么处理文字的绘制的。因为这一过程是封装在
Riched20.dll内部,所以我一直觉得很神秘。

如果说它是动态绘制,那么,在拖动滚动条后,计算新位置的每行文字、垂直位置等,工作
量很大,经过试验,确实不能平滑滚动。然而Richedit实际上没有一点停顿、延迟等现象,
即使在较低档的电脑上也是如此;

如果说,它是在一个画布上先绘制好,卷动时只是将响应部分显示出来,那么,当处理
一片较长的文章,并且字体较大,屏幕设置为24位色时,对内存的需求非常高。在通常
内存不多的电脑上,就必然有大量的内存交换到磁盘文件上。然而实际情况并非如此。我
曾经做过试验,将一篇2M的文章,显示在一个画布上,画布大小根据计算动态设置。结果
在建立画布的过程中,磁盘狂转一通后,我的512M内存的电脑报错,内存不够!

还有一点,即使你在编辑一片非常大的文稿,当插入字符、删除字符时,后续文字的位置
有了变化,画面立即刷新,没有觉得有任何延迟,奇怪!

哪位这方面的专家给予指点一二?
 
二者结合
 
在386机器上用过Word没有?
我在学校的使用用过,滚动的时候,word文件是一行一行的显示出来的,一般的机器性能比较
好,所以看不到闪烁,可以肯定的是,滚动的时候肯定是一行一行显示的,但也不会从第一行
开始重新显示,一般会先把显示区按滚动的方向移动(有相关的API,可以理解位),然后把
剩下的部分补足,减少重绘的区域。
 
顶部