richeidt 控件開發(二)

两个月的时间开发个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。




歡迎大俠們來批評指教哦
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值