Private Declare Function GetCursorPos Lib "user32" (ByRef lpPoint As POINTAPI) As Long '全屏坐標聲明

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、成都小程序開發(fā)、集團企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了豐寧免費建站歡迎大家使用!
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 '聲明轉(zhuǎn)換要用到的變量
GetCursorPos(P) '獲取鼠標在屏幕中的位置
ScreenToClient(Me.Handle.ToInt32, P) '轉(zhuǎn)換為本窗體的坐標
xx = P.x.ToString '把X轉(zhuǎn)換成能顯示到文本框的字符串格式
yy = P.y.ToString '把Y轉(zhuǎn)換成能顯示到文本框的字符串格式
TextBox1.Text = xx + "和" + yy '文本框的內(nèi)容為X坐標和Y坐標
End Sub
代碼寫起來可能比較麻煩,給你個思路,就是用GraphicsPath來繪制,然后通過繪制目標的鼠標移動事件來獲取當前鼠標在繪制目標中的實際位置,再通過GraphicsPath的IsVisible()方法來確認鼠標是否包含在GraphicsPath中。
DrawLine直線比較容易處理,只要得到Line的坐標點,然后比較當前鼠標坐標就好。
VB.NET里
如果要向非托管函數(shù)傳遞函數(shù)地址,需要傳遞一個委托對象,封送拆收器會自動把它轉(zhuǎn)化為非托管函數(shù)指針。
所以,
首先要根據(jù)要傳遞的函數(shù)——WndMessage定義對應(yīng)的委托類型:
(注意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最后一個參數(shù)的類型要改成上面定義的委托類型:
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (hwnd As Integer, nIndex As Integer, dwNewLong As WndProceDelegate) As Integer
調(diào)用的時候創(chuàng)建委托對象:
SetWindowLong(handle,GWL_WNDPROC,New WndProceDelegate(AddressOf WndMessage))
不過這里還有一個問題,封送拆收器只保證在平臺調(diào)用期間委托對象不會被回收。所以一旦SetWindowLong執(zhí)行完畢,你創(chuàng)建的委托對象就有可能被回收掉。可以用一個非局部變量(比如字段,靜態(tài)變量)來引用要傳遞的委托對象,這樣就不會被回收。
--------------------------------------------------------------------------------------------------------
另外,你可以直接繼承要接受相關(guān)消息的空間,重寫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
me.Cursor.ToString()
或者可以枚舉
me.cursor=Cursors.WaitCursor之類的
不過有以下局限:
自定義指針無法識別
窗口處于非激活狀態(tài)可能無效
與其他控件可能沖突
通過窗體的MouseDown事件的e.X和e.Y屬性獲取。通過e.Location屬性獲取Point類型的坐標。
下面的代碼示例使用 Location 屬性跟蹤鼠標左鍵單擊,并繪制一系列直線段作為對用戶輸入的響應(yīng)。如果隱藏窗體然后重新顯示它,此示例不保留已繪制的線段,該代碼為簡單起見而被省略了。
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
當前題目:vb.net鼠標捕獲,vb 鼠標點擊
網(wǎng)站鏈接:http://chinadenli.net/article6/dsioeig.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供、小程序開發(fā)、關(guān)鍵詞優(yōu)化、移動網(wǎng)站建設(shè)、用戶體驗、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)