说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

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

HTML文档下载 WORD文档下载 PDF文档下载
VB如何在VB中实现绘图区的大十字光标
作者:吴鹏炜
有时,我们需要用VB快速开发一个试验数据绘图处理程序,将绘图控件内的鼠标光标改变成与AutoCAD软件中使用的大十字光标的形式,将可以比普通的箭头光标达到更好的效果。那么我们如何实现这样的大十字光标呢?
---- 首先,我们明确一下要达到的效果,假若我们在一个Picture控件中绘图,那么,鼠标移动到这个控件上时,鼠标光标立即改变为大十字形状,光标中的横线从控件的左边界到右边界,竖线从控件的上边界到下边界,即大十字光标将绘图控件分割为四个象限。当鼠标移动到控件外时,光标则又恢复成原来的形式。

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

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

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

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

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

Option Explicit
Private Old_X As Single
Private Old_Y As Single
Private isMouseDown As Boolean
Private Box_X0 As Single
Private Box_Y0 As Single
Private Box_X1 As Single
Private Box_Y1 As Single
Private PenColor As Long
Private CrossColor As Long

Private Sub Form_Load()
CrossColor = QBColor(8)
PenColor = QBColor(15)
picDraw.DrawMode = vbXorPen
picDraw.MouseIcon = LoadPicture
(App.Path & "\no.cur")
picDraw.MousePointer = vbCustom
isMouseDown = False
Box_X0 = Box_X1 = Box_Y0 = Box_Y1 = 0
End Sub

Private Sub picDraw_MouseDown
(Button As Integer,
Shift As Integer, X As Single, Y As Single)
If isMouseDown = True Then
'先前已经用鼠标定义了一个点
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
End If
End Sub

Private Sub picDraw_MouseMove(Button As Integer,
Shift As Integer, X As Single, Y As Single)
If isMouseDown = True Then
'拖动鼠标来定义矩形的另外一个顶点,
此时擦除前一个矩形,绘制新的矩形
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
End If
Old_X = X
Old_Y = Y
End Sub

用DELPHI制作应用软件 用Dephi 程 序 维 护Paradox 数 据 表 的 索 引-Delphi资料 用Dephi程序维护Paradox数据表的索引-Delphi资料 用InstallShield制作数据库应用系统的安装程序-Delphi资料 在BDE中使用ASCII-Delphi资料 在DBMemo中查找文字-Delphi资料 在Delphi 程序中维护DBF 数据库 在Delphi 中 利 用 Tbatch 组 件 完 成 数 据 批 处 理 在Delphi 中使用计算出的字段 在Delphi3 程 序 中自 动 检 测、 建 立 数 据 库 别 名 和 表 格 在Delphi3程序中自动检测、建立数据库别名和表格 在Delphi4 BDE中配置Access数据库 在Delphi5 中修改了Delphi自带的VCL Source文件后怎样重建Delphi的库文 在DELPHI程序中动态设置ODBC数据源 在DELPHI程序中使用ADO对象存取ODBC数据库 在DELPHI程序中自动设置ODBC数据源 在Delphi的DBGrid中插入其他可视组件 在Delphi的Socket编程中如何从服务器向指定的客户机发送信息? 在Delphi动态生成定义数据库 在Delphi中处理数据库日期型字段的显示与输入 在Delphi中简单实现多重查询 在Delphi中建立和使用别名 在DELPHI中使用ADO对象存取ODBC数据库 在Delphi中使用DBF数据 在Delphi中随意控制DBGrid 每一行的颜色 在Delphi中自动检测、建立数据库别名和表格 在存储过程中使用use database-Delphi资料 在一个Dbgrid中显示多数据库-Delphi资料 在运行期创建表-Delphi资料 怎样把可以使用的表名输出到一个选择框?-Delphi资料 怎样发布基于Microsoft SQL Server的程序-Delphi资料 用SQL语句显示记录集中的倒数200条记录,及显示从第几条到第几到的记录?? 问:vb.net采用的是c#,那么在ms.net里面到底有没有visual c#.net??? 高手请进!ADO问题 给我已给在javabean里面使用HttpServletRequest对象的例子好吗?谢谢你了,具体到里面看看可以吗? 在office2000中打印来自matlab53的图形,总是提示word内存不足,word自行关闭。请问为何? 开开关关的窗口 用VC编写操纵数据库方面的COM组件有前途吗? 请问如何将CString中的字符串赋给char* ADODB.Connection问题,急!! 急急! 在javabean里面使用HttpServletRequest对象的例子好吗?谢谢你了,具体到里面看看可以吗? 河南的程序员考试成绩出来了没有?都快把大家急疯了! 一个类的四个问题?this指针等等,欢迎大家的光临。 请大家帮个忙!我的PARADOX数据库有660M,但是在读取的时候出现‘BLOB HAS BEEN MODIFIED‘!! 请问哪里有ado数据库引擎下载,谢谢~! BDE错误$2109 如何得到“我的文档”里的IShellView指针? SOS!各位帮帮我呀!“实现汉诺塔” 幫忙看一下下面這段代碼有什么問題? 改进后的开开关关窗口特别酷 请问在VB6与VB.NET在数据库方面有多大的区别呀?? 关于C语言 寻找将 AUTOCAD 文件格式转换成 PDF 格式的软件 谁有包含开发接口的OCR软件? 求助:没有紧急修复软盘,怎样恢复win2kserver的双启菜单。 请问怎么得到DATAGRID1中记录的总条数! 转发:一粒沙子的爱情故事 公司發過年禮物了 ,哎 ,原來是一塊石英表 ,雖然是情侶表 ,卻只發一塊 ,不是一對 ,你們呢!..... ??有解密高手吗?或者哪里有这样的论坛?? 怎样用多线程显示多个form? VB串口发送大数据量时其他程序没有反应? 这句sql语句怎么写?低手请教! 数据库高手请进,报表问题!!! 请介绍VC测试内存泄漏的好工具. select number from table需要分别得到所有的值,如果做? 请问如何将下载的控件加到delphi的控件面板上?先谢谢了!!! 一个form里面如何将6个radiobottom 分成两组? 开开关关IE窗口的小程序 请各位高手介绍一下win2K,wingate,sygate这些做上网服务器各使用什么技术?NAT?SOCK5? WIN2000 PRO. 怎样才能通过 NT4+MSPROXY 上网? ASP中如何实现等待几秒再执行下一步的功能? 数据库的烦恼之二 如何在程序中播放Power Point? 散分,帮我看看主机链接是否正常 BDE数据库的问题。 win2000中怎样配置开机启动文件(如98下的Msconfig) 痛苦的人请看 http://www.csdn.net/expert/topic/425/425671.shtm (UP者有分!) 关于strlen函数 高手请进 vc中是否有函数readline(),该如何调用, 如何将我写好的.java文件编译在单片机的系统中? 下载的.rar格式的文件怎样打开 星期天,我和爸爸妈妈去逛超市买牙膏.我们发现了同种竹盐牙膏有两种卖法:1、3个110克的牙膏组成清新畅享这篇文章有多少字 动物之间的天敌 梦见蜣螂、屎壳郎是什么寓意? 妈妈买了2盒牙膏,给售货员10元钱,应找回多少钱?牙膏每盒3.70元! 这是一种什么虫子它的天敌是什么 蜣螂 独角仙 屎壳郎 这几个昆虫的区别是什么?独角仙没长角的时候,怎么区别? 什么是生物防治,生物防治的常用方法是什么 某养鸡场的母鸡是公鸡的6倍后来公鸡母鸡各增加60只,母鸡变成公鸡的4倍,养鸡场原来共养了多少只鸡 梦见蜣螂、屎壳郎是什么意思,代表什么 小英家的鸡一天生5个蛋.共重5分之2kg.12个这样的蛋重多少千克 西瓜虫的天敌我厂里出现了很多西瓜虫.我一早上踩死了将近2000个但是还有很多,想问什么东西吃西瓜虫?是不是鸡之类的,最好有确切证据,如果可以的话就搞几个回来既环保.有没那么多尸体. 【昆虫学】屎壳郎/蜣螂是不是独角仙?雌性独角仙很像屎壳郎,它们之间有联系吗? 多多家的鸡一天生了8个蛋,共4/7千克,平均每个鸡蛋重多少千克 哪一种动物是昆虫的天敌? 屎壳郎学名是什么?A.蟑螂 B.蜣螂 一个水缸的缸口是一个圆形,直径是0.75米,给这个水缸做一个木桶,要求木桶的直径比缸口直径大5厘米,木盖的面积是多少平方厘米? 养鸡场的公鸡喝和母鸡共有810只,公鸡和母鸡的只数比是4:5.公鸡和母鸡各有多少只? 读后感《昆虫记》500字,不许超出 世界上多少以上的鸟类以昆虫为食,是害虫和鼠类的天敌?1,10%.2,20%.3,95%.4,70% 养鸡场有鸡240只,公鸡的只数比母鸡的5分之4少12只,养鸡场有公鸡和母鸡各多少只? 《昆虫记》 舒氏西绪福斯蜣螂与蜣螂父亲之本能 读后感 商店运来了20箱鸡蛋,每箱重20.25千克,比商店原来的鸡蛋多140千克.求这个商店现在有鸡蛋一共有多少千克 养鸡场养的公鸡比母鸡多249只,养的公鸡只数是母鸡的4倍,养鸡场公鸡和母鸡各多少只要算式和解答 通电分解水时得到10g氢气的同时可以得到 5 g氧气,得到10mL氢气的同时可以得到 mL通电分解水时得到10g氢气的同时可以得到( ) g氧气,得到10mL氢气的同时可以得到( )mL氧气.最好有思考过程! 每千克鸡蛋9.4元 有20元 8个蛋共重1千克 寄生性天敌昆虫与捕食性天敌昆虫的区别 天牛幼虫的能力(选择题)天牛幼虫有( )能力A.听觉 B.嗅觉 C.视力 D.敏锐的味觉 E.触觉 F.预测 用一个桶向一个水缸倒水,如果倒进3桶,连水缸重160千克,如果倒进5桶,连水缸重240千克,问一桶水重多少千克 养鸡场共养4800只鸡,其中肉鸡只数是蛋鸡的1.5倍,肉鸡养了多少只?(用方程解答) 急求天牛幼虫养殖技术,购买也可以在行的大虾请帮个忙 亚洲鲤鱼 天敌是什么 水如何分解成氧气和氢气 天牛幼虫可以吃吗?哥哥在劈柴的时候发现木头里面有一种白色的很肥的虫子,他说可以吃,是真的吗?那虫子是天牛幼虫吗? 鲤鱼和鲤鱼后区别是什么 如何让快速把水分解成氧气和氢气?把适量水连续放在一个大约0.11立方米的密闭空间内,让它快速连续完全分解,每两次分解的时间不能超过0.1秒,整个过程必需消耗的能量少,污染少,可以用催化 天牛幼虫在国内的养殖户都分布在什么地区?天牛幼虫可否有广域的市场?在行的请详解 跪谢 可以经济报答 上期合作 梦见鲤鱼 梦到鲤鱼 晚上做梦梦见到鲤鱼是什么意思 如何采集捕食性天敌 天牛幼虫有什么能力 赤眼蜂为什么是农林业害虫的天敌?急 为什么说亚洲鲤鱼到了美国没有天敌泛滥成灾,难道美国的鲶鱼不能捕杀它们吗?鲶鱼的猎物中也包括鲤鱼啊 天敌一定是捕食关系吗? 赤眼蜂的身体很小,它虽然不能捕食其他昆虫,却是玉米螟等许多害虫的天敌,在生物防治上有什么重要作用?这是为什么? 害虫天敌是什么意思 天敌是不是捕食关系 希望大家能为我解决这个问题那天在CCTV 10上看到蚂蚁不让七星瓢虫吃蚜虫 可是蚂蚁却不吃七星瓢虫 但可以说蚂蚁是瓢虫的天敌 这个就不是捕食关系 希望有人能给我一 市场上销售洗发水有两种包装:瓶装400mL,袋装0.5mL.其中毫升为xxx的单位 急 氧气+氢气 变成水,是可以喝的水吗 降雪时间推移 白色老鼠易被天敌发现而被捕食 这说明什么? 某品牌牛奶有两种包装:1000毫升的卖7.8元,250亳升卖2.4元,请你帮妈妈算�� (美丽的天敌)有两种意思 水分解产生氢气和氧气时吸收热量,这句话正确吗?化学反应中吸放热是指能量还是热量? 妈妈去买些发水,潘婷的洗发水有种规格的包装,请你帮妈妈算一算,买哪种最合算.第一种120毫升18元,第二种160毫升22元,第三种240毫升28、8元 .这是数学题请写出算式. 哪些动物是天敌哪两种动物 氧气和氢气结合成水能量怎么变化的 赤眼蜂在生物防止中重要作用求救 请问这些动物的天敌是什么请问鹰、狮子、鳄鱼、狼、豺狗、猎豹、大象他们的天敌分别是什么? 昆虫记里的《樵叶蜂》讲的是什么内容,要少! 妈妈买6盒牙膏共用24元,一把牙刷比一盒牙膏贵2元,一把牙刷多少元? 螨虫在自然界中的天敌是什么?也就是以其为食的动物或昆虫是什么?我google过了 基本都是吸尘器的广告\x09大神们帮帮忙 昆虫记读书笔记5篇每一篇都有摘抄的段落和个人感受.朋友们,马上就要开学了,
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn