
正文
vb.net鼠标捕获,vb 鼠标点击
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
在VB.net中怎么获取 鼠标在屏幕中的坐标
Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINTAPI) As Long '全屏坐标声明
Private Declare Function ScreenToClient Lib "user32.dll" (ByVal hwnd As Int32, ByRef lpPoint As POINTAPI) As Int32 '窗口坐标声明
Private Structure POINTAPI '声明坐标变量
Public x As Int32 '声明坐标变量为32位
Public y As Int32 '声明坐标变量为32位
End Structure
'以上是声明部分
'以下是窗口部分
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick '用时钟控件来取坐标,窗口上放个Timer组件,Enabled为允许,周期为10到100毫秒均可
Dim P As POINTAPI '声明坐标变量
Dim xx, yy '声明转换要用到的变量
GetCursorPos(P) '获取鼠标在屏幕中的位置
ScreenToClient(Me.Handle.ToInt32, P) '转换为本窗体的坐标
xx = P.x.ToString '把X转换成能显示到文本框的字符串格式
yy = P.y.ToString '把Y转换成能显示到文本框的字符串格式
TextBox1.Text = xx + "和" + yy '文本框的内容为X坐标和Y坐标
End Sub
相关问答
Q1: 如何通过vb.net WinForm窗体上画线条或弧线,让用户可以用鼠标捕捉(选中)已画的线条。
代码写起来可能比较麻烦,给你个思路,就是用GraphicsPath来绘制,然后通过绘制目标的鼠标移动事件来获取当前鼠标在绘制目标中的实际位置,再通过GraphicsPath的IsVisible()方法来确认鼠标是否包含在GraphicsPath中。
DrawLine直线比较容易处理,只要得到Line的坐标点,然后比较当前鼠标坐标就好。
Q2: vb.net 如何获取picturebox或者panel传递过来的消息?简单来讲就是如何捕获那些鼠标事件?
VB.NET里
如果要向非托管函数传递函数地址,需要传递一个委托对象,封送拆收器会自动把它转化为非托管函数指针。
所以,
首先要根据要传递的函数——WndMessage定义对应的委托类型:
(注意vb.net里面的Integer是32位,相当于vb6的Long)
Public Delegate Function WndProceDelegate(hwnd As Integer, msg As Integer, wp As Integer, ip As Integer) As Integer
然后SetWindowLong最后一个参数的类型要改成上面定义的委托类型:
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (hwnd As Integer, nIndex As Integer, dwNewLong As WndProceDelegate) As Integer
调用的时候创建委托对象:
SetWindowLong(handle,GWL_WNDPROC,New WndProceDelegate(AddressOf WndMessage))
不过这里还有一个问题,封送拆收器只保证在平台调用期间委托对象不会被回收。所以一旦SetWindowLong执行完毕,你创建的委托对象就有可能被回收掉。可以用一个非局部变量(比如字段,静态变量)来引用要传递的委托对象,这样就不会被回收。
--------------------------------------------------------------------------------------------------------
另外,你可以直接继承要接受相关消息的空间,重写WndProce。
Public Class MyPanel : Inherits Panel
Protected Overrides Sub WndProc(ByRef m As Message)
Select Case m.Msg
Case WT_PACKET
Case Else
MyBase.WndProc(m)
End Select
End Sub
End Class
Q3: 求VB.NET怎么捕捉系统鼠标当前状态?如:打开文件等待时的漏斗状态,或双箭头的可拉伸状态,谢谢。
me.Cursor.ToString()
或者可以枚举
me.cursor=Cursors.WaitCursor之类的
不过有以下局限:
自定义指针无法识别
窗口处于非激活状态可能无效
与其他控件可能冲突
Q4: vb.net 怎样获取鼠标单击点的坐标
通过窗体的MouseDown事件的e.X和e.Y属性获取。通过e.Location属性获取Point类型的坐标。
下面的代码示例使用 Location 属性跟踪鼠标左键单击,并绘制一系列直线段作为对用户输入的响应。如果隐藏窗体然后重新显示它,此示例不保留已绘制的线段,该代码为简单起见而被省略了。
Dim FirstPoint As Point
Dim HaveFirstPoint As Boolean = False
Sub Form1_MouseDownDrawing(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles Me.MouseDown
If HaveFirstPoint Then
Dim g As Graphics = Me.CreateGraphics()
g.DrawLine(Pens.Black, FirstPoint, e.Location)
HaveFirstPoint = False
Else
FirstPoint = e.Location
HaveFirstPoint = True
End If
End Sub







