VB中的POINTAPI

1 篇文章 0 订阅
1 篇文章 0 订阅

今天在用VB写一个小程序,需要获取鼠标的当前位置,该怎么写呢?

随便看看vb中的一个函数的声明:

Private Sub Form_DragDrop(Source As Control, X As Single, Y As Single)

其实在这个声明中X就是当前的X坐标,Y就是当前的Y坐标,如果要用的话,直接拿来用的就好。不过这里的坐标是以Form为坐标系的,就是Form的左上角是(0,0),如果在别的控件的函数,这里的坐标都是相对该控件的左上角而言的啊。

当然了,不是所有的函数声明中都会有X和Y的声明,如果我们想获得当前鼠标的位置的话就要调用一个windows的API:GetCursorPos

VB深为大家诟病的一点就是VB本身封装的API细节太多了,虽然减轻了程序员的任务量,但是隐藏太多深层次的东西让程序员进行深度的开发就显得被束缚住了手脚。不过对于我这种只需要写一些小软件的个人开发者而言,VB6.0就够用了。VB6.0的确有点落伍,它和我都差不多岁数了,去图书馆借的书也都是2003年左右出版的了,但是还是那句话:IDE还是为人服务的,够用就行,杀鸡何须宰牛刀?(似乎有些说跑偏了啊)

windows的API都是用C/C++写成的,在VB中调用这些API需要用的Declare语句。在工程的General中声明一下这个API:

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

windows最重要的三个系统dll就是user32.dll、gdi32.dll、kernel32.dll,VB对这三个dll中的API支持还是比较好的,但是对于其他用C/C++写的dll,vb就未必能够很好的支持了。前面讲了,这涉及一个代码转换的问题。在VB中用declare调用API会发现Long这个数据类型的“曝光频率”相当的高,这是因为C/C++中“曝光频率”相当高的pointer类型、int类型都是4字节的,VB中需要用4字节的Long和C/C++进行类型匹配(函数参数入栈的需要)。

上面的API里出现了VB中自定义类型POINTAPI,这个类型和用VisualC++中的POINT是相似的,它在VB中的定义如下:

Type POITNAPI

x  As Long

y As Long

End Type

声明一个POINTAPI类型的变量,访问x和y就能够得到当前鼠标坐标了。当然了,获得的坐标还与VB的坐标系统有关,VB提供了8中坐标系统(ScaleMode),第一种是User坐标系,自己指定单位刻度,另外七种都是指定不同的单位刻度的,比如inch、pixel以及twip(缇)。美国世界上少有的依然采用10进制和12进制并存的单位制的国家,尤其是pixel、twip这些东西换算到厘米上面还挺麻烦的。好在我很少去做绘图的东西,所以和坐标系这块打交道的比较少。我们平时用的坐标系主要获得相对位置就行了,没有必要对单位进行换算,但是如果真正做绘图的程序,那就得把坐标系这块搞明白。有机会我会对这些单位进行详细的说明。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值