如何用C编写文本编辑器(11)

发布时间:2021-06-06

C#编写文本编辑器

■ ■ ■

东北-西南 SizeNESW 南北 SizeNS 西北-东南 SizeNWSE

根据上图所示,已知主矩形,控制点的类型(是内控制点还是外控制点)和控制点的宽度可以计算出所有的控制点的位置。可以编一个例程,输入3个参数,主矩形区域的

Rectangle结构体,是否是内控制点(不是内控制点就是外控制点)和控制点的宽度,该例程计算所有控制点的位置,然后返回一个包含8个Rectangle的数组,该数组就是0到7号的控制矩形的位置和大小。

TextObject对象显示后就应该知道自己在视图区域中的位置,当它相应鼠标移动消息时,就可以根据鼠标光标位置和8个控制矩形进行比较,若鼠标光标在某个控制矩形中时就要通知文本编辑器改变鼠标光标的样式。

一般的控制点被画成一个矩形方框,控制点也被画成两种类型,一种是填充色为深色(蓝色或黑色)和白色边框,另一种是深色边框并填充白色。可以观察窗体设计器,可以在设计器中选择多个控制,其中有一个控件的控制点为填充色为蓝色和白色边框的,该控制为当前控件。而其他选择的控件的控制点为蓝色边框并填充白色,这些控件为选择控件。在文本编辑器中没有这种情况,因此在此可以使用内控制点方式,控制点用黑色填充,边框白色。

当鼠标在控制点上进行拖拽操作就应当可以动态的修改对象的大小,以前我是如此实现的

在鼠标按键按下事件处理(HandleMouseDown)中,若鼠标光标在某个控制点上则设置一个鼠标按键按下标记变量,并记下鼠标光标位置,然后退出事件处理

在鼠标移动事件中(HandleMouseMove),若设置了鼠标按键按下标记变量,则根据当前鼠标光标位置和上一次鼠标光标的位置之差就是鼠标光标移动的距离,该距离的水平分量和垂直分量就是对象宽度和高度的改变量,此时可以使用库函数

System.Windows.Forms.ControlPaint.DrawReversibleFrame在界面上绘制一个虚线框,当鼠标移动时不断的调用该库函数,这样实现了所谓的“橡皮筋”操作

在鼠标按键松开事件(HandleMouseDown)处理中,根据鼠标光标的当前位置和以前记下的鼠标按键按下时的鼠标光标位置计算两者之差,这样就是整个鼠标拖拽操作中鼠标光标移动的距离,程序就可以依据该距离来改变对象的大小

经过一些编程实践,发现该操作比较麻烦,需要编写不少代码,而且代码分散在3个事件处理过程中,多了一些全局变量,很难写出一个通用例程到处调用,经过分析,将这种处理模式改掉了。其实一般的程序正在进行鼠标拖拽操作时,用户是不可能同时进行其他操作(不如边鼠标拖拽边打字),而且进行”橡皮筋“操作时程序用户界面无需重新绘制,这样可以认为进行鼠标拖拽时应用程序应用程序只处理鼠标移动消息和鼠标松开消息而不进行任何其他操作,为了编程简单,甚至连重绘界面的操作也不处理了,因此可以编一个通用例程来处理整个的鼠标拖拽来实现“橡皮筋”操作,该函数处理过程为

在鼠标按键按下事件处理(HandleMouseDown)中就调用该例程

进入例程中,首先记下鼠标光标的当前位置,然后进入一个死循环

如何用C编写文本编辑器(11).doc 将本文的Word文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219