自第一篇发布后,收到了不少建设性的意见,这里尤其感谢网友weolar、路人甲,他们在给我重要提示的同时让我意识到自己的武断。上篇我曾经说过richedit是非常底层的实现,其实我起初也不这么认为,只是在Win2K泄漏代码中能找到几乎所有想要的内容同时却无法发现richedit半点踪迹故形成这种判定。事实正如网友weolar、路人甲提及,richedit属于应用层的实现,看过代码之后感受到一种亲切感,因为大多数概念在我移植ie代码的时候都曾见到过,只是当初并未深入图文编排细节,仅着眼于渲染引擎。再次感谢这两位网友,不是他们的帮助,我无法在短时间内完成一个初步的具备完美特征的IM RichEdit实现。WinNT中的richedit应该是1.0,现在普遍的是2.0,最近研究发现Win8中更多的暴露了TOM接口,如果采用那些接口,实现起来会更加简单,这个后面我会提及。给我的感觉就是在实现一样东西的时候,谁都意识不到它会那么经用,到后来发现扩展性不够的时候,升级起来却并不是那么干脆了,顾及兼容性,只能在大版本更新的时候动大手术。
在我实作的同时,大量使用了搜索引擎和谷歌技术论坛。我没有找到直接答案,然而各种扑朔迷离的线索总是恍恍惚惚带着我走向最终的胜利,让我再次体会到成功贵在坚持不懈。在自认为差不多满意的时候,通过跟同事的探讨,我横下心继续追求完美,相信自己做的不会比QQ的实现差。
目前完成了大纲中的高效动画实现部分,这部分耗时1周,另外加上前2周的工作之外时间的技术调用。接口基于IRichEditOle,也就是说只要符合RichEdit实现规范的都支持,包括窗口的和无窗口的。那什么是符合RichEdit实现规范呢,就是符合RichEdit窗口实现的方式,特指无窗口的RichEdit实现。你可能说我不知道如何实现无窗口的RichEdit,这个不要紧,我以后会做。后面的文章我会陆续把第一部分实现进行详细讲解,同时实现第二部分。
效果图:
示例工程下载
大纲如下: