有一窗体,上面有几个按钮及文本框等控件。现在我想在这个窗体失去焦点的时候,也就是单击这个窗体以外的任何一个地方(肯定不在这个窗体的范围之内),这个窗体就自动 unload me
我在窗体的LostFocus事件中加入 unload me,但不管用。我调用API函数SetCapture,捕捉鼠标的位置,然后再ReleaseCapture,这样倒是可以卸载,但窗体内的几个其它的控件失效了,就在SetCapture后失效了,苦思不得解决,不知哪位大侠可以指点一二?
我在窗体的LostFocus事件中加入 unload me,但不管用。我调用API函数SetCapture,捕捉鼠标的位置,然后再ReleaseCapture,这样倒是可以卸载,但窗体内的几个其它的控件失效了,就在SetCapture后失效了,苦思不得解决,不知哪位大侠可以指点一二?
SendMessage函数需要指定一个要接收消息的那个窗口的句柄,我不能确定下一个得到焦点的是哪一个窗口,也许是其它程序的窗口。所以这两种方法都行不通,请大家再指点!
OldWindowProc = SetWindowLong(hwnd, GWL_WNDPROC, AddressOf NewWindowProc) '设置相关的窗口信息
End Sub
’模块Public OldWindowProc As Long
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
Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Public Const GWL_WNDPROC = (-4)
Public Const WM_ACTIVATE = &H6
Public Const WA_ACTIVE = 1
Public Const WA_CLICKACTIVE = 2
Public Const WA_INACTIVE = 0Public Function NewWindowProc(ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long '注意不要在这里面运行类似 Form1Show 或 End 等等破坏性的操作
If msg = WM_ACTIVATE Then
If (wParam = WA_ACTIVE Or wParam = WA_CLICKACTIVE) Then
Form1.Caption = "活动窗口" '窗口得到焦点时
Else
Form1.Caption = "非活动窗口" '窗口失去焦点时
Unload Form1 '关闭
End If
End If
NewWindowProc = CallWindowProc(OldWindowProc, hwnd, msg, wParam, lParam)
End Function