richeidt 控件開發(二)

来源:互联网 发布:matlab矩阵符号运算 编辑:程序博客网 时间:2024/05/22 13:38

两个月的时间开发个richedit还是挺有挑战的,其实开发一个基本能用的还是可以的,但是要开发一个高效的还是比较有挑战。

开始构想整体思路,借鉴别人的的建议就是基于一行一行的绘画,那么从这个思路入手,整篇文档即是被分为N行,每一行里面有具体的内容,如果读到'\n'那么直接新建一行,否则自动换行,每一行可划分为若干个子段,每一个字段对应一个高度height和一个宽度width或者字符数charCount,行对象包含最大高度、宽度、起点在文章中的pos、终点在文章中的pos;整篇文章可以看作是一个长字符串,这个长字符串可分为N个具备相同charformat(文本格式)的小段,通过维护一个style列表可以知道每一个pos对应的文本格式是怎样的;也就是我们可以这样假设:1~20个字符里面,我们把它瓜分为四个属性1~6是文本格式1,7~9是文本格式2,10~15是文本格式3,16~18是文本格式4,19~20是文本格式5,那么我们就可以存放一个vector,保存<1,文本格式1>,<7,文本格式2>,<10,文本格式3>,<16,文本格式4>,<19,文本格式5>,我们可以通过二分查找的方法找到一个position对应的的文本格式,这样就解决了绘画每个line的时候对应的style的问题。

照这样的思路,我们可以定义出以下对象:

 LineObjManager:LineObjList_;

 LineObj:maxHeight_,width_,beginPos_,endPos_;

 StyleListManager:StyleList_;

现在遇到一个问题是文章中是文字和图片混合,应该如何处理?莫非维护一个ImageObj表,并在绘画line的时候检测是否有image应该要插入?

ImageObjManager:imageMap_;(<pos,imageObj>)


2012-02-10:想想應該把imageobj直接放在LineObj裏面,裏面包含一個imagelist。




歡迎大俠們來批評指教哦