Private Sub Form_Unload(Cancel As Integer) If MsgBox("您是否要退出系统 ?", 4 + 32 + 256, cProgramName) = vbYes Then Cancel = False End Else Cancel = True End If End Sub
以上是程序能先取得控制权,弹出一个确认框来,可以关闭也可以不关闭 '*****************在resize事件中强制 Private Sub Form_Resize() Select Case Me.WindowState Case 0 '‘窗体正常时的程序代码 Case 1 '‘窗体最小化时的程序代码 Case 2 '‘窗体最大化时的程序代码 End Select End Sub
用HOOK截获窗体最小化等消息~
to fishzone(阿愚) 我想,iamdan的意思是在窗体变化前来看控制变化。 但现在的做法,只能在窗体变化后从新恢复。
Private Sub Form_Load() preWndProc = GetWindowLong(Form1.hWnd, GWL_WNDPROC) SetWindowLong Form1.hWnd, GWL_WNDPROC, AddressOf WndProc End SubPrivate Sub Form_Unload(Cancel As Integer) SetWindowLong Form1.hWnd, GWL_WNDPROC, preWndProc End Sub ' add module1 Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const GWL_WNDPROC = (-4)Public preWndProc As Long Public Const SC_MAXIMIZE = &HF030&Public Const SC_MINIMIZE = &HF020&Public Const SC_CLOSE = &HF060&Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long Select Case wParam Case SC_MAXIMIZE MsgBox ("maximize") Case SC_MINIMIZE MsgBox ("minmize") Case SC_CLOSE MsgBox ("close") End Select
至于用hook吗?这是WM_SYSCOMMAND的子消息。 方法如上。楼上的方法少一层select case Msg,但效果一样。
lihonggen0(用VB)能否再说清楚一点:以下的代码是否可以结合一下。 Private Sub Form_Unload(Cancel As Integer) If MsgBox("您是否要退出系统 ?", 4 + 32 + 256, cProgramName) = vbYes Then Cancel = False End Else Cancel = True End If End Sub
以上是程序能先取得控制权,弹出一个确认框来,可以关闭也可以不关闭 '*****************在resize事件中强制 Private Sub Form_Resize() Select Case Me.WindowState Case 0 '‘窗体正常时的程序代码 Case 1 '‘窗体最小化时的程序代码 (这里我就不是太明白!知道了又怎么Cancel = True??????????????????????????) Case 2 '‘窗体最大化时的程序代码 End Select End Sub
form1_resize 事件。不知道你说的控制是什么意思,但是你可以在resize事件中强制
me.windowstate=0
me.width=xxxx
me.height=xxxx
....等等。
If MsgBox("您是否要退出系统 ?", 4 + 32 + 256, cProgramName) = vbYes Then
Cancel = False
End
Else
Cancel = True
End If
End Sub
'*****************在resize事件中强制
Private Sub Form_Resize()
Select Case Me.WindowState
Case 0
'‘窗体正常时的程序代码
Case 1
'‘窗体最小化时的程序代码
Case 2
'‘窗体最大化时的程序代码
End Select
End Sub
我想,iamdan的意思是在窗体变化前来看控制变化。
但现在的做法,只能在窗体变化后从新恢复。
preWndProc = GetWindowLong(Form1.hWnd, GWL_WNDPROC)
SetWindowLong Form1.hWnd, GWL_WNDPROC, AddressOf WndProc
End SubPrivate Sub Form_Unload(Cancel As Integer)
SetWindowLong Form1.hWnd, GWL_WNDPROC, preWndProc
End Sub
' add module1
Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic 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 LongPublic Const GWL_WNDPROC = (-4)Public preWndProc As Long
Public Const SC_MAXIMIZE = &HF030&Public Const SC_MINIMIZE = &HF020&Public Const SC_CLOSE = &HF060&Function WndProc(ByVal hWnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Select Case wParam
Case SC_MAXIMIZE
MsgBox ("maximize")
Case SC_MINIMIZE
MsgBox ("minmize")
Case SC_CLOSE
MsgBox ("close")
End Select
WndProc = CallWindowProc(preWndProc, hWnd, Msg, wParam, lParam)
End Function
方法如上。楼上的方法少一层select case Msg,但效果一样。
Private Sub Form_Unload(Cancel As Integer)
If MsgBox("您是否要退出系统 ?", 4 + 32 + 256, cProgramName) = vbYes Then
Cancel = False
End
Else
Cancel = True
End If
End Sub
以上是程序能先取得控制权,弹出一个确认框来,可以关闭也可以不关闭
'*****************在resize事件中强制
Private Sub Form_Resize()
Select Case Me.WindowState
Case 0
'‘窗体正常时的程序代码
Case 1
'‘窗体最小化时的程序代码 (这里我就不是太明白!知道了又怎么Cancel = True??????????????????????????)
Case 2
'‘窗体最大化时的程序代码
End Select
End Sub