一、背景
在PS、WPS办公软件中总会出现画一个文本框,画一个图片的操作,还能拖动,拉伸,旋转,层叠,请问这是如何实现的呢?
二、本文目的
简单猜测一下文本框的绘制思路。
三、具体思路
(一)鼠标选中文本框功能时发生了什么?
1、此时会把模式设置为文本框绘制模式,会把鼠标和键盘的事件焦点集中到当前工作台。
2、此时所有的鼠标键盘事件都会记录下来,用来提供给文本框绘制的参数(坐标,宽高)
(二)此时鼠标点击工作台某个位置,不松开
程序的变量会记住鼠标第一次点击时的x和y坐标,作为文本框的绘制起始坐标。
(三)鼠标不释放,开始向右下角拖动
1、此时,开始把文本框组件绘制到界面中(只添加一次)。
2、并且监听鼠标拖动事件,不断获取最新的鼠标箭头坐标。
3、把最新的坐标和起始坐标相减,就得到文本框的最新宽高。
4、调用文本框对象的设置宽高方法,把宽高设置为最新的宽高。
5、可能需要更新界面,或者自动更新界面。
(四)鼠标释放后,文本框确定当前的宽高,取消设置
1、此时鼠标移动到文本框的四周,会出现上下左右方向拉伸的箭头,出现移动箭头,还出现旋转箭头。
2、如何实现?可能需要设计文本框的事件范围判断,在对应范围就处理对应鼠标事件,显示对应的鼠标箭头。
3、可能文本框的边框需要画的萎缩一点,留四周的空白区域画那些拉伸图标。
(五)单击文本框的边框,激活文本框的设置
只有当鼠标处在边框的误差范围内,才能单击有效,把设置的各个图标显示出来,把旋转图标绘制出来。
四、主要难点
1、在适当的地方处理适当的事件。
2、要重新设计文本框,重新绘制背景,边框,图标。
3、要实现输入法的光标,也就是点击时的输入光标。
4、当输入后还要把文字绘制到文本框内部。
5、还需要实现文本框的特性,文字多种方向。背景图和背景颜色。