C#编写文本编辑器
HandleMouseMove 方法,处理鼠标移动事件
HandleMouseUp 方法,处理鼠标按键松开事件
FromXML 方法,从一个XML节点加载对象数据
ToXML 方法,向一个XML节点保存对象的所有的数据
由于文档内容是分层次的,因此还定义一个容器类型TextContainer,该类型从TextElement派生的,其中进行扩展来可以保存若干个子对象,它定义了以下虚成员 MaxWidth 属性,对象内容的最大宽度,一个文档显示宽度就是纸张宽度减去左右页边距的距离,文档所有的内容被限制在这个显示宽度中间,该属性和显示宽度有关
ChildElements 只读属性,返回所有子对象的集合,返回类型为
System.Collections.ArrayList
AppendChild 方法,该方法参数为一个TextElement对象,本方法将该对象添加到子对象集合中
RemoveChild 方法,该方法参数为一个TextElement对象,本方法从子对象集合中删除指定的文档元素对象
RemoveChildRange 方法,该方法和RemoveChild类似,只是用于删除一批子对象 InsertBefore 方法,该方法参数为两个TextElement对象,第一个参数为要新增的文档元素对象,第二个为插入点所在的文档元素对象
InsertRangeBefore 方法,该方法和InsertBefore类型,只是用于插入一批文档元素对象
在某些容器对象中存在一个特殊的子元素,该子元素为最后一个元素,并且不能删除,比如对于段落对象,在此是一种容器对象,该对象最后一个元素为一个段落结尾标记对象,该对象不能删除,而在其他类型的容器对象中也可能存在类似的结尾对象,因此在TextContainer对象中就考虑这种情况,因此定义了一套虚成员来处理
AddLastElement 虚方法,想容器对象添加段落结尾标记对象来作为最后一个对象,其他派生的容器对象可以重载该方法来实现自己的最后对象
IsLastElement 函数,该函数参数为一个TextElement对象,本函数返回指定的
TextElement对象是否是最后对象,程序在删除子元素前都有调用该函数,若要删除的元素为最后元素则不应当删除
TextContainer对象还重载RefreshSize方法来重新计算所有子元素的显示大小,此外还定义了新的虚方法RefreshLine来进行分行处理,为了方便分行处理,还定义了文档行对象TextLine,文档行对象用于保存文档内容分行信息,当文档分行完毕而内容没有发生改变时重新绘制文档内容时就无需重新计算要显示的内容的坐标,文档行对象的成员有 LineSpacing 行间距,也就是本文档行下端和下文本行上端的距离
Elements 属于该文档行的所有的文档元素的集合,该属性为了编程方便
FirstElement 本文档行第一个元素
LastElement 文档行最后一个元素
RealLeft , RealTop 文档行左上角在文档视图区域中的位置
Container 本文档行所在的容器对象
ContentWidth 本文档行所有元素的宽度和
为了保存分行信息,TextContainer对象还定义了一个Lines只读属性,该属性返回System.Collections.ArrayList对象列表,该列表元素为属于该容器的所有文本行对象,容器对象执行RefreshLine进行分行的步骤为