form重新获得焦点问题

zhaoxiaoxilove 2007-07-27 05:03:47
我想每当一个form重新获得焦点时(比如现在是IE游览器,再点这个form,form重新获得焦点),执行一断代码,如何实现?
我试了
Private Sub Form_Activate()这个只能在由不可见变为可见时起作用,
Private Sub Form_GotFocus()这个,如果form中有控件,就不起作用,
请问有没有别的方法呢?
...全文
195 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzyong00 2007-07-27
  • 打赏
  • 举报
回复
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

学习一下蚜虫的方法


kingsang 2007-07-27
  • 打赏
  • 举报
回复
ding
yachong 2007-07-27
  • 打赏
  • 举报
回复
又要提子类化了
窗体获得焦点时改变标题栏为当前时间。注意窗体名是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
xiaolei1982 2007-07-27
  • 打赏
  • 举报
回复
上面的两种对vb内部来说得失焦点有效,你要和外部有关联估计还是要用api,
具体的等高高手帮你解决吧

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧