浏览器大全:是一个提供流行浏览器教程、在线学习分享的学习平台!

VB中LostFocus、GotFocus事件的改进

重庆邮电学院 徐原

---- VB中有一个LostFocus事件和一个GotFocus事件,看名字似乎是当当前窗口失去焦点或得到焦点时触发的事件。但在实际应用时却发现当这个窗口和Windows中其他窗口进行切换时并没有触发这两个事件。现在解析一下这两个事件。

---- Form_LostFocus、Form_GotFocus是指的是一个MDI主父窗体调用了多个子窗体,当这些子窗体之间切换时,就触发这两个事件;当一个窗体中的多个文本框,鼠标点击另一个文本框时,也会触发这两个此事件,文本框在 Windows内部实际上也是一个窗口。

---- Windows内部是通过消息来触发事件的,这两个事件在Windows内部对应的消息是WM_NCACTIVATE,当该消息的wParam为0时表示是失去焦点,为非0时表示得到焦点。在模块中:

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 DefWindowProc Lib
"user32" Alias "DefWindowProcA"_
(ByVal hwnd As Long, ByVal wMsg As Long,
ByVal wParam As Integer, ByVal_
lParam 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 WM_NCACTIVATE = &H86
Public Const GWL_WNDPROC = (-4)
Public OldWndProc&

Public Function Hook&(ByVal hWnd1&)
OldWndProc = SetWindowLong(hWnd1,
GWL_WNDPROC, AddressOf NewWndProc)
Hook = OldWndProc
End Function

Public Sub UnHook(ByVal hWnd1&)
SetWindowLong hWnd1, GWL_WNDPROC, OldWndProc
End Sub

Public Function NewWndProc&(ByVal hWnd1&, ByVal uMsg&,
ByVal wParam&, ByVal lParam&)
If uMsg = WM_NCACTIVATE Then
   If wParam = 0 Then ’失去焦点
      Form1.Caption = "失去焦点"
       注释:在这里加入在失去焦点时想要执行的代码
   Else
              Form1.Caption = "得到焦点"  
        ’在这里加入在得到焦点时想要执行的代码
   End If
End If
NewWndProc = CallWindowProc(OldWndProc,
hWnd1, uMsg, wParam, lParam)
End Function

窗口中代码如下:

Private Sub Form_Load()
Hook Form1.hwnd
End Sub

Private Sub Form_QueryUnload(Cancel As Integer,
UnloadMode As Integer)
UnHook Form1.hwnd
End Sub

---- 注意:在编写“失去焦点”和“得到焦点”的代码时,不要使用VB本身自带的函数,如: MsgBox()和Print()等,因为这里不支持,要用MessageBox()、TextOut()等API函数来代替,否则VB会出现“非法保护性错误”而把VB连带程序一起关掉。
---- 本程序在VB6.0企业版中调试通过。

相关软件

2345加速浏览器官方版

2345加速浏览器官方版 | 56.2MB

2345加速浏览器官方版

新一代2345加速浏览器采用Chromium和IE双内核,主打极速与安全特性。基于Chromium深度定制,引入网页智能预加载技术,访问网页更快速..

QQ浏览器官方正式版

QQ浏览器官方正式版 | 49.67MB

QQ浏览器官方正式版

QQ浏览器秉承TT浏览器1-4系列方便易用的特点,但技术架构不同,交互和视觉表现也重新设计,采用Chromium内核+IE双内核,让浏览快速稳定...

百度浏览器最新版下载

百度浏览器最新版下载 | 13.3MB

百度浏览器最新版下载

q百度浏览器,是一款简洁轻快、智能懂你的浏览器。依靠百度强大的搜索平台,在满足用户浏览网页的基础上,它整合百度体系业务优势,带给用户更方便的浏览方式功能...

UC浏览器官方正式版

UC浏览器官方正式版 | 44.2MB

UC浏览器官方正式版

UC浏览器(UC Browser)是UC Mobile Limited在2004年8月开发的一款软件,分uc手机浏览器和uc浏览器电脑版。UC浏览器是全球使用量最大的第三方手机浏览器...

猎豹浏览器2022最新版下载

猎豹浏览器2022下载 | 45MB

猎豹浏览器2022最新版下载

猎豹安全浏览器对Chrome的Webkit内核进行了超过100项的技术优化,访问网页速度更快。其具有首创的智能切换引擎,动态选择内核匹配不同网页...

360安全浏览器官方版下载

360安全浏览器下载 | 21.4MB

360安全浏览器官方版下载

360安全浏览器拥有全国最大的恶意网址库,采用恶意网址拦截技术,可自动拦截挂马、欺诈、网银仿冒等恶意网址。独创沙箱技术,在隔离模式即使访问****也不会感染...