form重新获得焦点问题
我想每当一个form重新获得焦点时(比如现在是IE游览器,再点这个form,form重新获得焦点),执行一断代码,如何实现?
我试了
Private Sub Form_Activate()这个只能在由不可见变为可见时起作用,
Private Sub Form_GotFocus()这个,如果form中有控件,就不起作用,
请问有没有别的方法呢?
[解决办法]
上面的两种对vb内部来说得失焦点有效,你要和外部有关联估计还是要用api,
具体的等高高手帮你解决吧
[解决办法]
又要提子类化了
窗体获得焦点时改变标题栏为当前时间。注意窗体名是Form1
添加一个模块,粘贴以下代码:
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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
Public Const GWL_WNDPROC = (-4)
Public Const WM_KILLFOCUS = &H8
Public Const WM_ACTIVATE = &H6
Public PrevProc As Long
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_ACTIVATE And wParam = 2 Then
Form1.Caption = Now '窗体激活执行此代码
End If
End Function
窗体Form1的代码:
Private Sub Form_Load()
PrevProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, PrevProc
End Sub
[解决办法]
ding
[解决办法]
Public Declare Function SetWindowLong Lib "user32 " Alias "SetWindowLongA " (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public 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
Public Const GWL_WNDPROC = (-4)
Public Const WM_KILLFOCUS = &H8
Public Const WM_SETFOCUS As Integer = &H7
Public PrevProc As Long, iCount As Integer
Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
WindowProc = CallWindowProc(PrevProc, hwnd, uMsg, wParam, lParam)
If uMsg = WM_SETFOCUS And iCount > 0 Then
Form1.Caption = Now '窗体激活执行此代码
End If
Debug.Print iCount
End Function
Private Sub Form_Load()
PrevProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
End Sub
Private Sub Form_Resize()
iCount = iCount + 1
End Sub
Private Sub Form_Unload(Cancel As Integer)
SetWindowLong Me.hwnd, GWL_WNDPROC, PrevProc
End Sub
学习一下蚜虫的方法