众所周知可以通过调用SetCapture和ReleaseCapture模拟控件对象的MouseExit事件
但没有窗口句柄的label控件的MouseExit属性该如何写?
另外网上有没有提供MouseExit事件的label控件下载?如果有请给出下载地址,必须要求具备label的背景透明功能
不要给出利用Form_MouseMove的方法,太浪费系统资源,而且这种方法在控件比较多的情况下编写代码太繁琐!
请各位帮帮忙!
但没有窗口句柄的label控件的MouseExit属性该如何写?
另外网上有没有提供MouseExit事件的label控件下载?如果有请给出下载地址,必须要求具备label的背景透明功能
不要给出利用Form_MouseMove的方法,太浪费系统资源,而且这种方法在控件比较多的情况下编写代码太繁琐!
请各位帮帮忙!
但是我们仍然可以使用子类化技术实现他,下面的代码就是一个简单的例子来处理Windows的
WM_MOUSELEAVE消息的,我演示的是鼠标移出一个Button时的情形。1.加入一个模块,专门用来处理子类函数:Option Explicit'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'Copyright 2002 40Star, All Rights Reserved.
'
'E-Mail :[email protected]
'Distribution:你可以完全自由随便的使用这段代码,不管你用于任何目的
' 程序在于交流和学习
' 如有任何BUG请和我联系
'
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, _
ByVal wParam As Long, lParam As String) As LongPrivate Declare Function GetWindowLong Lib "user32" Alias _
"GetWindowLongA" (ByVal hwnd As Long, _
ByVal nIndex As Long) As LongPrivate Declare Function SetWindowLong Lib "user32" Alias _
"SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex _
As Long, ByVal dwNewLong As Long) As Long
Private Declare Function CallWindowProc Lib "user32" Alias _
"CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal _
hwnd As Long, ByVal Msg As Long, ByVal wParam As _
Long, ByVal lParam As Long) As Long
Const GWL_WNDPROC = (-4&)Dim PrevWndProc&Private Const WM_DESTROY = &H2
Public Declare Function TrackMouseEvent Lib "user32" (lpEventTrack As TRACKMOUSEEVENTTYPE) As LongPublic Const TME_CANCEL = &H80000000
Public Const TME_HOVER = &H1&
Public Const TME_LEAVE = &H2&
Public Const TME_NONCLIENT = &H10&
Public Const TME_QUERY = &H40000000Private Const WM_MOUSELEAVE = &H2A3&Public Type TRACKMOUSEEVENTTYPE
cbSize As Long
dwFlags As Long
hwndTrack As Long
dwHoverTime As Long
End TypePublic bTracking As Boolean
Dim evtTrack As TRACKMOUSEEVENTTYPE
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Private Function SubWndProc(ByVal hwnd As Long, ByVal Msg As Long, _
ByVal wParam As Long, ByVal lParam As Long) _
As Long If Msg = WM_DESTROY Then Terminate (hwnd) '处理鼠标移出消息
If Msg = WM_MOUSELEAVE Then
bTracking = False
Form1.Print "The mouse left the form!"
End If
SubWndProc = CallWindowProc(PrevWndProc, hwnd, Msg, wParam, lParam)
End FunctionPublic Sub Init(hwnd As Long)
PrevWndProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf SubWndProc)
End SubPublic Sub Terminate(hwnd As Long)
Call SetWindowLong(hwnd, GWL_WNDPROC, PrevWndProc)
End Sub' -- 模块结束 -- '2. 窗体中处理需要加入的代码:Option ExplicitPrivate Sub Command1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If bTracking = False Then
bTracking = True
Dim ET As TRACKMOUSEEVENTTYPE
'initialize structure
ET.cbSize = Len(ET)
ET.hwndTrack = Command1.hwnd
ET.dwFlags = TME_LEAVE
'start the tracking
TrackMouseEvent ET
End If
End SubPrivate Sub Form_Load()
Call Init(Command1.hwnd)
End SubPrivate Sub Form_Unload(Cancel As Integer)
Call Terminate(Command1.hwnd)
End Sub
你给出的代码好复杂啊!估计完全看懂都要花不少的时间
CommandButton控件有hwnd窗口句柄,而label控件不具备hwnd窗口句柄,以上的代码用在label控件上是否也行得通?你试过没有?
Select Case Me.Tag
Case "Label1"
Label1.Caption = "MouseOut"
Me.Tag = ""
Case "Label2"
Label2.Caption = "MouseOut"
Me.Tag = ""
Case "Label3"
Label3.Caption = "MouseOut"
Me.Tag = ""
End Select
End SubPrivate Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.Caption = "MouseIN"
Me.Tag = "Label1"
End SubPrivate Sub Label2_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label2.Caption = "MouseIN"
Me.Tag = "Label2"
End Sub
Private Sub Label3_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label3.Caption = "MouseIN"
Me.Tag = "Label3"
End Sub
Private Sub Form_Load()
Label1.ForeColor = vbBlue
End SubPrivate Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ForeColor = vbBlue
End SubPrivate Sub Label1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Label1.ForeColor = vbRed
End Sub
难道就没有其它更好的办法了吗?
高手请指教
关键是hwnd属性该如何写?有没有介绍相关知识的资料或书籍下载?
自己UP
不过我是弄了个无图的Image上去
能否说得再详细点?给个例子代码
用textbox不行吗