如何编写文本编辑器

如何编写文本编辑器

ID:19681116

大小:46.00 KB

页数:11页

时间:2018-10-05

如何编写文本编辑器_第1页
如何编写文本编辑器_第2页
如何编写文本编辑器_第3页
如何编写文本编辑器_第4页
如何编写文本编辑器_第5页
资源描述:

《如何编写文本编辑器》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、这里所指的文本编辑器不是简单的像Windows自带的单行或多行文本编辑框,而是类似于Word的文本编辑器。粗看起来,一个编辑器有什么好难的,其实很难的,因为我们认为容易的事对计算机来说确实天大的问题。比如大家经常上网,可以发现最近几年很多网站登录时除了输入用户名和密码后还要输入所谓的验证码,而验证码则在输入框旁边歪歪扭扭的画了出来,就像小学一年纪的学生在一张脏纸上写的一样,这样做只是为了防止程序来模拟登录,因为歪歪扭扭的文字人类可以很容易的辨认,而计算机则很不容易辨认。 一个文本编辑器主要处理的问题有文件保存格式的定义,文档保存为文本格式还是二进制格式的,文档中各个信息单元

2、保存什么信息。文档格式很重要。和文档存储系统的交流,也就是保存和加载文档的功能,这里的文档存储系统可以是操作系统文件子系统,数据库,网络,其实文件格式定下了,各种文档存储系统差别不大。文档加载后的文档对象维护,面对比较复杂的文档处理,需要使用面向对象的编程思想,认真分析文档结构,将加载的文档数据一点点肢解掉,每一个最小的不可分割的文档数据转换为一个对象,然后使用一个对象树来保存文档内容的层次关系,这样构造一个文档对象树。文档编辑工作就是维护这个文档对象树了。文档对象的排版,文档加载后需要处理整个文档对象树,计算每个对象的显示大小,然后在视图区中排列要显示的对象,包括段落和文

3、档行的计算,然后计算对象在视图区域中的直角坐标参数。文档的绘制,这里的绘制包括在计算机屏幕上绘制文档内容和在打印机上绘制。程序根据计算好的对象在视图区中的坐标,进行一些坐标转换,在图形输出对象上绘制对象,比如绘制一个文字或图片。由于.NET框架中,操作屏幕和打印机都是基于GDI+的,两者没有本质差别,因此一些处理的绘制代码可以绘制屏幕,也可以绘制打印机。在屏幕上绘制文档还特别需要优化,尽量减少闪烁。环境消息的处理,环境消息指一些Windows消息,这些消息应该改变文档内容,比如鼠标键盘消息,系统粘贴板的相关消息。程序处理这些消息,修改文档对象树,向对象树插入删除或修改文档元

4、素对象。文档对象树发生改变后需要重新对文档进行排版,处理进行段落计算和文档行计算,重新计算对象在视图区中的位置,然后根据需要刷新屏幕显示。此外还有用户选择文档内容时也要处理。文档的保存,程序根据文档对象树生成一些数据,然后保存到文档存储系统,这一步可以看作对象序列化。应用程序的开放性,提供二次开发的能力,提供类似VBA的功能   一个完整的功能不弱的文本编辑器结构是很复杂的,涉及到的问题非常广泛,没有数万行的代码是搞不定的,这些问题在本文是不可能一一列出来并进行讨论,在此只好挑一些重点来说说。文档对象模型   在实际开发时不必挨个解决问题,我是首先确定文档对象树的结构,这里

5、使用了文档对象模型的概念,其实我们已经碰到很多种文档对象模型,最多的莫过于HTML文档对象模型,我们用JavaScript来控制HTML页面内容时就是使用HTML文档对象模型,此外还有XML文档对象模型,VBA操作的是Word或Excel文档对象模型。使用文档对象模型,可将文档中所有的内容和内存中的某个对象联系起来,当应用程序修改了内存的对象的数据,则相应的文档内容就修改了。删除了内存中的对象也就删除了相应的文档内容。一些文档对象模型的思想可以参考http://www.w3.org。   5.1-9,,services,andmakethecitymoreattractiv

6、e,strengtheningpublictransportinvestment,establishedasthebackboneoftheurbanrailtransitmulti-level,multi-functionalpublictransportsystem,thusprotectingtheregionalpositionandachieve文档对象模型中有很常见的是对象的继承和重载。大家可以看看.NET类库的System.XML名称空间下定义的XML文档对象模型,你可以发现无论是XML文档对象(XMLDocument),XML节点(XMLElement)还是

7、属性(XMLAttribute),甚至注释(XMLComment)纯文本数据(XMLText)都是从抽象类XMLNode继承过来的。这样设计的好处是可以很方便的遍历XML文档对象树,各种对象都是从XMLNode派生的,都根据各自需要重载一些成员方法,其他程序都可把这些对象都看作XMLNode来使用,利用对象方法的重载和多态性来实现各自不同的处理。基础对象   在这种指导思想下,我也定义了一个抽象类TextElement,所有的文档对象都是从该对象派生的。该类定义了以下虚成员Left,Top,Width,Height

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。