如何在VB中实现绘图区的大十字光标

2016-02-19 20:14 29 1 收藏

有一种朋友不在生活里,却在生命力;有一种陪伴不在身边,却在心间。图老师即在大家的生活中又在身边。这么贴心的服务你感受到了吗?话不多说下面就和大家分享如何在VB中实现绘图区的大十字光标吧。

【 tulaoshi.com - 编程语言 】

有时,我们需要用VB快速开发一个试验数据绘图处理程序,将绘图控件内的鼠标光标改变成与AutoCAD软件中使用的大十字光标的形式,将可以比普通的箭头光标达到更好的效果。那么我们如何实现这样的大十字光标呢?

----首先,我们明确一下要达到的效果,假若我们在一个Picture控件中绘图,那么,鼠标移动到这个控件上时,鼠标光标立即改变为大十字形状,光标中的横线从控件的左边界到右边界,竖线从控件的上边界到下边界,即大十字光标将绘图控件分割为四个象限。当鼠标移动到控件外时,光标则又恢复成原来的形式。

----要实现这样的光标,得我们自己通过画线的方式实现。如鼠标在绘图控件内,先在鼠标的当前位置画上光标的横线和竖线;当鼠标位置移动,先擦除原先的光标横线和竖线,然后再在新的位置画光标的横线和竖线,那么我们就要响应绘图控件的MouseMove事件。当然,绘图控件内无论有什么内容,我们擦除光标线和重画光标线时都不能破坏原先的内容,因此我们要将绘图控件的DrawMode设置为vbXorPen(异或方式),绘制光标的横线和竖线时,用异或的方式将横线和竖线的象素点颜色设为光标的颜色和原先的象素点色彩的异或值,再用异或的方式在同样的位置绘制一遍竖线和横线,横线和竖线上的象素点再一次和光标颜色进行异或操作,就擦除了光标的横线和竖线,且又恢复了绘图控件内原先的内容。

----我们还得保证鼠标移动到绘图控件内时,普通的鼠标光标消失,只有绘制的大十字光标出现,因此还应该设置绘图控件的MousePointer属性为vbCuntom,即用户自定义。绘图控件的MousePointer属性设置为vbCustom后,其MouseIcon属性中应装入相应的用户自定义图形,因为我们希望绘图控件内只有我们绘制的光标,而没有其它的光标,故应该装入一个空的(透明的)光标图形。可以任找一个光标文件,通过任意一个资源编辑器对其进行编辑,用透明的方式填充整个光标图形,保存成我们所需的NoIcon.cur即可。

----通过以上的关键设置和操作,我们就可以实现大十字光标了。利用异或方式进行绘图,我们还可以实现一般绘图软件中常有的“橡皮筋”效果,即用鼠标定义一个点后,动态拖动鼠标来定义另外一个点,动态拖动鼠标过程中,所要绘的图形也动态相应变化。

----以下我们通过一个示例来完整实现绘图控件中的大十字光标,还演示如何实现用“橡皮筋”效果来画矩形:

----在VB中新建一个标准EXE工程,在Form1中加入一个Picture控件,其Name设为PicDraw,可以装入一个图象文件,PicDraw的大小和其中的图象大小基本上覆盖大部分的Form1即可。实现代码如下所示。此程序在VB5.0中运行通过。

OptionExplicit
  PrivateOld_XAsSingle
  PrivateOld_YAsSingle
  PrivateisMouseDownAsBoolean
  PrivateBox_X0AsSingle
  PrivateBox_Y0AsSingle
  PrivateBox_X1AsSingle
  PrivateBox_Y1AsSingle
  PrivatePenColorAsLong
  PrivateCrossColorAsLong
  
  PrivateSubForm_Load()
  CrossColor=QBColor(8)
  PenColor=QBColor(15)
  picDraw.DrawMode=vbXorPen
  picDraw.MouseIcon=LoadPicture
  (App.Path&"o.cur")
  picDraw.MousePointer=vbCustom
  isMouseDown=False
  Box_X0=Box_X1=Box_Y0=Box_Y1=0
  EndSub
  
  PrivateSubpicDraw_MouseDown
  (ButtonAsInteger,
  ShiftAsInteger,XAsSingle,YAsSingle)
  IfisMouseDown=TrueThen
  '先前已经用鼠标定义了一个点
  Box_X1=X
  Box_Y1=Y
  isMouseDown=False
  picDraw.DrawMode=vbCopyPen
  picDraw.Line(Box_X0,Box_Y0)-
  (Box_X1,Box_Y1),
  PenColor,B
  picDraw.DrawMode=vbXorPen
  '画一个光标
  picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
  CrossColor
  picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
  CrossColor
  Old_X=X
  Old_Y=Y
  Else
  '定义了一个矩形的第一个顶点,则擦除光标
  picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
  CrossColor
  picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
  CrossColor
  Box_X0=X
  Box_Y0=Y
  isMouseDown=True
  EndIf
  EndSub
  
  PrivateSubpicDraw_MouseMove(ButtonAsInteger,
  ShiftAsInteger,XAsSingle,YAsSingle)
  IfisMouseDown=TrueThen
  '拖动鼠标来定义矩形的另外一个顶点,
  此时擦除前一个矩形,绘制新的矩形
  picDraw.Line(Box_X0,Box_Y0)-(Old_X,Old_Y),
  PenColor,B
  picDraw.Line(Box_X0,Box_Y0)-(X,Y),PenColor,B
  Else
  '消除旧光标线
  picDraw.Line(0,Old_Y)-(picDraw.ScaleWidth,Old_Y),
  CrossColor
  picDraw.Line(Old_X,0)-(Old_X,picDraw.ScaleHeight),
  CrossColor
  '画新的光标线
  picDraw.Line(0,Y)-(picDraw.ScaleWidth,Y),
  CrossColor
  picDraw.Line(X,0)-(X,picDraw.ScaleHeight),
  CrossColor
  EndIf
  Old_X=X
  Old_Y=Y
  EndSub->

(本文来源于图老师网站,更多请访问https://www.tulaoshi.com/bianchengyuyan/)

来源:https://www.tulaoshi.com/n/20160219/1623088.html

延伸阅读
当您开始用第一条绣花线时,请在布料背后预留1cm长的线尾。用手指按住线尾,然后开始刺绣。在进行刺绣时,用针步将线尾固定下来。完成一条绣花线后,只需在布料背后连针带线穿过几个针步,并将余下的线段剪去便可。 十字绣怎么绣?十字绣的绣法 十字绣怎么绣 十字绣的基本材料是刺绣线和特殊工艺制作的网格面料,只要有设...
标签: 刺绣 十字绣
十字绣 绣的绣布也有很多规格和品牌,通常来说,各个品牌的十字绣布都各有不同,而且用的布料也有很多种类,如普通棉布、彩丝布、亚麻布、塑料布等,我们在用的时候最好根据个人的需要进行选择。今天图老师就将各类绣布的比较与鉴别方法,以及如何选择十字绣布为大家介绍一下,希望能对你有所帮助。 各类十字绣布比较和鉴别 ...
标签: 刺绣 十字绣
前些天从淘宝网上网购了一幅“荷花鲤鱼图”的 十字绣 绣图,有一些地方需要进行勾边,于是在今天早上将第一根线刚刚绣完的时候,突然的灵光一闪,想出了一个不错的小方法,在这里63diy跟大家一起来分享一下。 一般我们在勾边的时候用的是回针法,这样背面就有一段段的线,有横有竖很难看,如果背线从绣的线和布的线都是竖...
十字绣图案精美秀丽,让人感觉十字绣图案欣赏起来是一种美的享受,但是十字绣图案绣起来也需要一定的技巧和正确的针法。下面一起来看看中国十字锈针法的针法介绍哦! 1、全针绣法(X) 先由网眼1穿上来,再由网眼2穿下去,再由网眼3穿上来,再由网眼4穿下去,再网眼5穿上来,再由网眼2下去,再由网眼3上来,再由网眼6下去,以次类推...
标签: 刺绣 十字绣
一幅完美 十字绣 的制作,一些必要的准备工作可不能少。下面我们来看一看十字绣制作所必要的工具有哪此: 1、绣布 作为绣品的背景,绣布的选择非常重要,选择绣布要从颜色、纹理等方面考虑,没有必要去追求品牌,只要格子正,布孔清楚,手感挺实就可以。在绣之前最好先把布用水洗一下晾干后再用,这样可以有效的预缩水,否则绣品...

经验教程

212

收藏

63
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部