16,554
社区成员
发帖
与我相关
我的任务
分享
Dim tsbl As New List(Of String)(New String() {"ToolStripButton1", "ToolStripButton7", "ToolStripButton5", "ToolStripButton4", "ToolStripButton6", "ToolStripButton2", "ToolStripButton3"})
Dim cls As New SubClass(tsbl)
Public Class SubClass
Inherits NativeWindow
Dim x As Integer
Dim y As Integer
Private strToolStripButtonNameList As List(Of String)
Public Sub New(ByVal ToolStripButtonNameList As List(Of String))
MyBase.New()
strToolStripButtonNameList = ToolStripButtonNameList
End Sub
Private bolStart As Boolean = False
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
'If m.Msg <> 15 Then
'Console.WriteLine(m.ToString)
'End If
''WM_MOUSEACTIVATE
If m.Msg = &H21 Then
bolStart = True
End If
''WM_LBUTTONDOWN 窗体有焦点时在WM_MOUSEACTIVATE之后会收到WM_LBUTTONDOWN消息,这个时候就不要去处理WM_LBUTTONUP
If m.Msg = &H201 Then
If bolStart = True Then
bolStart = False
End If
End If
''WM_LBUTTONUP
If m.Msg = &H202 Then
If bolStart = True Then
bolStart = False
x = CInt(m.LParam) And &HFFFF
y = (CInt(m.LParam) And &HFFFF0000) >> 16
Dim c As ToolStrip = Control.FromHandle(Me.Handle)
For Each s As String In strToolStripButtonNameList
Dim ts As ToolStripButton = c.Items(s)
Dim rect As Rectangle = ts.Bounds
If rect.Contains(x, y) Then
ts.PerformClick()
End If
Next
End If
End If
MyBase.WndProc(m)
End Sub
End Class
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
cls.AssignHandle(Me.ToolStrip1.Handle)
End Sub
Dim cls As New SubClass("ToolStripButton123")
Private Sub ToolStripButton1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolStripButton123.Click
Console.WriteLine(Environment.TickCount.ToString)
End Sub
Public Class SubClass
Inherits NativeWindow
Dim x As Integer
Dim y As Integer
Public strToolStripButtonName As String
Public Sub New(ByVal ToolStripButtonName As String)
MyBase.New()
strToolStripButtonName = ToolStripButtonName
End Sub
Private bolStart As Boolean = False
Protected Overrides Sub WndProc(ByRef m As System.Windows.Forms.Message)
If m.Msg <> 15 Then
'Console.WriteLine(m.ToString)
End If
''WM_MOUSEACTIVATE
If m.Msg = &H21 Then
bolStart = True
End If
''WM_LBUTTONDOWN 窗体有焦点时在WM_MOUSEACTIVATE之后会收到WM_LBUTTONDOWN消息,这个时候就不要去处理WM_LBUTTONUP
If m.Msg = &H201 Then
If bolStart = True Then
bolStart = False
End If
End If
''WM_LBUTTONUP
If m.Msg = &H202 Then
If bolStart = True Then
bolStart = False
x = CInt(m.LParam) And &HFFFF
y = (CInt(m.LParam) And &HFFFF0000) >> 16
Dim c As ToolStrip = Control.FromHandle(Me.Handle)
Dim ts As ToolStripButton = c.Items(strToolStripButtonName)
Dim rect As Rectangle = ts.Bounds
If rect.Contains(x, y) Then
ts.PerformClick()
End If
'bolStart = False
End If
End If
MyBase.WndProc(m)
End Sub
End Class
End Class