网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C# > 正文
用C#编写文本编辑器详解
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/14
下载{$ArticleTitle}原创论文样式
│ ■│7 西-南 SizeWE 3│■ 西-南 SizeWE │ │ │ │ │ │ │ │ │6 5 4 │ └────────────────┘ ■ ■ ■东北-西南 SizeNESW 南北 SizeNS 西北-东南 SizeNWSE

    根据上图所示,已知主矩形,控制点的类型(是内控制点还是外控制点)和控制点的宽度可以计算出所有的控制点的位置。可以编一个例程,输入3个参数,主矩形区域的Rectangle结构体,是否是内控制点(不是内控制点就是外控制点)和控制点的宽度,该例程计算所有控制点的位置,然后返回一个包含8个Rectangle的数组,该数组就是0到7号的控制矩形的位置和大小。

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

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

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

  • 在鼠标按键按下事件处理(HandleMouseDown)中,若鼠标光标在某个控制点上则设置一个鼠标按键按下标记变量,并记下鼠标光标位置,然后退出事件处理
  • 在鼠标移动事件中(HandleMouseMove),若设置了鼠标按键按下标记变量,则根据当前鼠标光标位置和上一次鼠标光标的位置之差就是鼠标光标移动的距离,该距离的水平分量和垂直分量就是对象宽度和高度的改变量,此时可以使用库函数System.Windows.Forms.ControlPaint.DrawReversibleFrame在界面上绘制一个虚线框,当鼠标移动时不断的调用该库函数,这样实现了所谓的“橡皮筋”操作
  • 在鼠标按键松开事件(HandleMouseDown)处理中,根据鼠标光标的当前位置和以前记下的鼠标按键按下时的鼠标光标位置计算两者之差,这样就是整个鼠标拖拽操作中鼠标光标移动的距离,程序就可以依据该距离来改变对象的大小

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

  • 在鼠标按键按下事件处理(HandleMouseDown)中就调用该例程
  • 进入例程中,首先记下鼠标光标的当前位置,然后进入一个死循环
  • 该死循环首先调用Win32API函数 WaitMessage等待Windows消息,若没有任何Windows消息则退出该循环
  • 调用Win32API函数PeekMessage来获得当前Windows消息
  • 上一篇资讯: 在C#中实现串口通信
  • 下一篇资讯: 用Visual C#做DLL文件
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号