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

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

Facebook与开发者交恶 扼杀第三方应用 负载大逃亡:四十二路怪兽联军及七条逃生法则 那些年,MIT技术男们奇妙的黑客作品 深度分析:腾讯3.3亿美元收购Epic股份值吗? 传下一代iOS或将推行扁平化设计 iOS开发者注意:苹果将拒绝访问UDID的应用上架 领先Google、Amazon、Dropbox,Apple云存储用户最多 传IBM重新设计晶体管 预计五至七年内成熟 快讯:云计算大会6月召开 云计算概念企业股票飙升 集成开发环境:Qt Creator 2.7.0发布 移动周报:“今日头条”CEO,爱冒险的技术宅 从China Daily的iPad版,看中国纸媒如何摆脱“旧情结” 天睿推出大数据探索平台:“开箱即用”的数据分析 Basho开源Riak CS,与AWS S3兼容的云存储架构 MongoDB Days北京杂记 VMware携手亿阳信通 铺垫混合服务 行业应用,移动优先:移动难七大痛点剖析 HTML5开发必备:游戏开发资源合集 老而弥坚:65岁传奇Android工程师谈开发 2013中国云计算有奖大调查,每周大奖等你拿! Google Reader之死另一个不为人知的原因 小团队谈推广:豆果、金山、微博易、面包旅行 敏捷实战:如何让团队迭代交付周期缩短一半 移动设备管理初创公司AirWatch:首轮融资2亿美元 New Relic:不等应用崩溃,实时监控你的App! Zynga力挽狂澜三步棋:移动+授权+自有网络 巧用MapReduce+HDFS,海量数据去重的五大策略 革自己的命?为带来一致体验 IE11伪装FireFox 最古老的Linux发行版Slackware以及Arch Linux齐弃MySQL JEECG v2.3 发布,基于代码生成器的智能开发框架 Mozilla将设应用工场 Firefox OS瞄准欧洲南美 关于操作系统 怎样拦截某个控件的消息? 请问怎么不加lib档又可以编译做好的dll?? 请问DivX的使用 请问有谁研究过USB接口的驱动????? 简单问题:怎么给我满意的答复加分呢? 救命啊。。。 9行程序崩溃WIN2000/xp 太、太、太好了!连帮助都是中文的,还可以继承、多线程,盗版比正版还提前发布。 关于C++的构造函数的问题 初学java网络编程的问题 KYLIX如何连接ORACLE? 有全套的ERP源代码出售 俺的机子装了Linux现在想改装WindowNT,用NT分区格式化后,咋一启动就显示LI,然后就不动了。 我安装了win2000和redhat Linux7.2,要启动盘才能进入Linux,怎样能在启动时选择进入 pb6.5 + personal oracle 815 连接数据库数据库出错!!! 哪位用VC编写XML处理程序的大侠: 100分求购密码登陆jsp程序 vb如何让我Happy 请教:关于ODBC的密码? 使用log函数,应该import那个库 请问关于数据库存储过程调试的问题,急! 关于CPROPERTYSHEET 的一些小问题!! windows message的疑问? 这是什么问题啊!提示:select error:Data-conversion resulted in overflow. socket 一对多的问题 请教有关typedef的问题(菜鸟问题) 基于对话框的应用程序怎么操作数据库? Sybase数据库备份 谁有正版dotnet下载的ftp站点?有分啊!!! 公司的头交了一个任务给我,让我解决以前公司做的三层结构的效率问题,还请大家帮忙发表下意见,谢谢 如何得到当前的记录位置? 请问如何实现以下的数据分离(很简单的问题) 若干个思考 请问这句语句的执行过程是怎样的? 串口通信 应用程序在失去焦点时如和使之继续工作? HELP! 链接错误,救命啊!!!//LINK ERROR Can you help me ? 程序打包时如何配置 BDE 那块? 寻求帮助,熟悉类的朋友请进 在vb中怎样调用winsock的api函数?如调用ntohl函数。请各位大侠帮忙!谢谢! 我想做一个多层结构的数据库查询程序,请问sybase提供的中间键有什么 今天可是3.15呀~~~~~~~~ 软件工程技术的分类 我要疯了,我用nmftp的list方法可以列出文件列表,用nlist就会出现erangeError!咱回事啊? 提问 javax.xml.parsers 包那里可以下载到???? 问问考高程的时间 疑问 想自己写一个h.263的视频压缩算法,各位有否相关资料提供?? 硫酸亚铁(FeSO4)可用于治疗缺铁性贫血,根据硫酸亚铁的化学式计算:(1)硫酸亚铁的相对分子质量.(2)硫酸亚铁中铁、硫、氧三种元素的质量比.(3)硫酸亚铁中铁元素的质量分数( 硫与过量的氢氧化钠的化学反应方程式 马达是靠什么顺时针转或者逆时针转的!不改变电流方向的情况下!像遥控汽车是怎么想前进就前进!想后退就会后退的! 阿司匹林精制选择溶媒依据什么原理?为何滤液要自然冷却? 初三化学题Nacl中有少量CuSO4如何除杂?请问用钡金属直接置换是否可行?钡遇水会怎么样? 化合价为什么可以为分数,C17H36,和HO2中碳的化合价和氧的化合价分别为多少?化合价为分数有什么意义 阿司匹林的制备在精制过程中为什么滤液要自然冷却,快速冷却会出现什么现象 有碳碳双键就能与就能发生氧化反应吗 有碳碳双键就能与酸性高锰酸钾发生氧化反应吗 怎么控制马达顺时针,逆时针转!马达是靠什么顺时针转或者逆时针转的!不改变电流方向的情况下!像遥控汽车是真么想前进就前进!想后退就会退的!难道遥控汽车的发动机改变的是磁极?因该没 阿司匹林精制选择溶媒依据什么原理?为什么滤液要自然冷却? 能与酸性高锰酸钾发生氧化反应的条件是不是碳原子上有阿尔法氢原子,如果不是,是什么阿尔法氢原子是什么 用醋制作无壳鸡蛋 全一点 有关初中化学的除杂问题. 比如说:Na2SO4(Na2CO3) ZnSO4(CuSO4) CaCO3(CaCl2)到底该怎么除杂呀 我知道除杂是要将除去的那部分中不含杂质 但是我不知道该用那一个方程式 帮帮忙啦..解释 重铬酸钾法测定cod 回流过程中重铬酸钾不过量,如何处理?能否接着加一定量重铬酸钾 如何制作无壳鸡蛋?牵扯了那些化学知识 除杂ZnSO4(CuSO4) 生活污水和油墨废水测COD的方法是一样的吗?我们平常是用重铬酸钾回流法...这个方法能用吗? 鸡蛋皮与酱油、食醋、食用碱溶液反应结果 鉴别水和盐水物理实验步骤在两个烧杯中,分别盛有适量的水和盐水,请设计两个鉴别这两种液体的物理实验,要求说明使用的实验器材和实验步骤 高锰酸钾有腐蚀性吗?能腐蚀生活中的什么东西? 蒸发饱和溶液析出带结晶水的晶体,剩余溶液中溶剂是不是减少急 在实验室里有两杯液体,如何分清哪个是浓盐水哪是水,可以自选实验器材 高锰酸钾特性有没有腐蚀性? 化学;KNO3(CUSO4)去杂质的化学方程式 北极投影图逆时针自传为什么是地球自转方向 碘酸钾的分子式,高锰酸钾有腐蚀性吗?原因 所有的一元醇都能被氧化为具有相同碳原子数的醛或酮为什么不对 超临界状态的水有腐蚀性,为什么 有一种白色粉末样子看上去跟那个高锰酸钾相似,对皮肤有腐蚀性,请问叫什么名字? 除杂质 KNO3(CUSO4) AG(CU) 为什么水会有超临界状态100摄氏度时水不就沸腾了吗,超临界又是怎样的?不需用途,最好从粒子运动方面解释 把糖融化到水里, 醇氧化后不能生成相同碳原子数的醛或酮什么意思 既然钛有惊人的抗腐蚀性,那么如果我们用超临界水来炼钛的话,会出现什么情况? 物质和水怎么发生化学变化学有机化学的时候 总是看到生成的物质 遇水分解成什么什么的 既然是分解就是化学变化 想说为什么遇到水会发生化学变化呢? 就是提出假设,恩,还想问一下泡面上面撕下来的东东是什么?想拿他做实验! 除去cu(zn) znso4(cuso4) nacl(na2co3) al(no3)3(agno3)中的杂质 硝酸钾的饱和溶液降温,会有晶体析出吗 请问电机的正反转怎么看?是从转子前面看顺时针,逆时针还是从转子后面(风扇那边)看顺时针,逆时针? Ca(CuO).Cu(Zn).Cu(Fe2O3).CuO(C).FeSO4(CuSO4).Cu(NO3)2(AgNO3).除杂了除杂了,括号里是杂质,要方程式 既可以提炼出自然界里()的物质,还可以制造出自然界里()的物质? 抽油烟电机的转向从下面看是顺时针还是逆时针 Zn + CuSO4 = ZnSO4 + Cu Q= KJ/mol此反应是在溶液里进行,溶液温度80度,还有 Zn + CdSO4 = ZnSO4 + Cd Q= KJ/mol此反应也是在溶液里进行,溶液温度80度, 现有60℃时的硝酸钾饱和溶液210g,若降温至20℃,析出硝酸钾晶体的质量是多少g60℃时硝酸钾的溶解度为110g,20℃时硝酸钾的溶解度为31.6g 去除Cu(Zn)和FeCl2(CuCl2)括号中的杂质的化学方程式 1mol/L硫酸亚铁溶液称取硫酸亚铁(FeSO4.7H2O)多少克不好意思,补充下1mol/L硫酸亚铁溶液称取硫酸亚铁(FeSO4.7H2O)多少克,比如分别配置1000ml或200ml溶液。 用化学方法既可以提炼出自然界 的物质,还可以制造出自然界里 的物质用化学方法既可以提炼出自然界( )的物质,还可以制造出自然界里( )的物质 Zn(NO3)2【Cu(NO3)2】 括号内是杂质,去除杂质用什么试剂 化学方程式是 在阿司匹林粗产品中加乙醇和三氯化铁有什么现象? 二价铁与高锰酸钾如何反应?酸性条件 请填写“水蒸发的快慢与什么因素有关”的实验报告要有假设,要有实验步骤. 用化学方程式除去括号内的杂质 (1)Cu(Fe) (2)Fe(Fe2O3) 将105g60℃的硝酸钾饱和溶液降温至20℃时,能析出多少克硝酸钾晶体 水蒸发的快慢与什么因素有关的实验报告 除去下列括号内的杂质,用化学方程式表示:Cu ZnSO4 CO CO2 一种物质发生化学反应后,若有水生成,我认为该物质中一定含有氢元素.这句话对吗如题 吸油烟机电机顺时针还是逆时针晕 有的顺时针 有的逆时针 汗 怎样用化学方法除去下列物质中的少量杂质(括号内为杂质),用化学方程式表示. (1)Cu(Fe)___________怎样用化学方法除去下列物质中的少量杂质(括号内为杂质),用化学方程式表示. (1 将饱和溶液降温到某度析出晶体A(不含结晶水)的质量( 的计算 )20℃时将140gA物质饱和溶液降温到t1°C,析出晶体A(不含结晶水)的质量为 (20°C时A物质溶解度为40g t1°C时溶解度为20g) 顺时针逆时针怎样区分
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘