Private Sub Form_Resize() If Me.WindowState = 1 Then MsgBox "小" End If End Sub
Form_Resize事件里,判断表单的windowstate属性.
Private Sub Form_Resize() if WindowState = 0 then ‘当窗体最小时 …… '你的代码 end if End Sub
窗体 Option ExplicitPrivate Sub MDIForm_Load() Hook Me.hWnd End SubPrivate Sub MDIForm_Unload(Cancel As Integer) Unhook End Sub模块 Option Explicit Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) 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 nfIconData As NOTIFYICONDATA Public Const WM_LBUTTONDOWN = &H201 Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Public Declare Function ReleaseCapture Lib "user32" () As Long Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long Public Const RGN_OR = 2 Public Const WM_NCLBUTTONDOWN = &HA1 Public Const HTCAPTION = 2 Public Const WM_RBUTTONDOWN = &H204 Public Const WM_RBUTTONUP = &H205 Public Const WM_ACTIVATEAPP = &H1C Public Const NIF_ICON = &H2 Public Const NIF_MESSAGE = &H1 Public Const NIF_TIP = &H4 Public Const NIM_ADD = &H0 Public Const NIM_DELETE = &H2 Public Const MAX_TOOLTIP As Integer = 64 Public Const GWL_WNDPROC = (-4) Public Const WM_LBUTTONDBLCLK = &H203Type NOTIFYICONDATA cbSize As Long hWnd As Long uID As Long uFlags As Long uCallbackMessage As Long hIcon As Long szTip As String * MAX_TOOLTIP End Type Private FHandle As Long Private WndProc As Long Private Hooking As Boolean Public Const WM_SYSCOMMAND = &H112Public Sub AddIconToTray(MeHwnd As Long, MeIcon As Long, MeIconHandle As Long, Tip As String) With nfIconData .hWnd = MeHwnd .uID = MeIcon .uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP .uCallbackMessage = WM_RBUTTONUP .hIcon = MeIconHandle .szTip = Tip & Chr$(0) .cbSize = Len(nfIconData) End With Shell_NotifyIcon NIM_ADD, nfIconData End SubPublic Sub RemoveIconFromTray() Shell_NotifyIcon NIM_DELETE, nfIconData End SubPublic Sub Hook(Lwnd As Long) If Hooking = False Then FHandle = Lwnd WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc) Hooking = True End If End SubPublic Sub Unhook() If Hooking = True Then SetWindowLong FHandle, GWL_WNDPROC, WndProc Hooking = False End If End SubPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Hooking = True Then If lParam = WM_LBUTTONDOWN Then SetForegroundWindow hw MDIForm1.Show MDIForm1.WindowState = 0 SetForegroundWindow hw RemoveIconFromTray Exit Function End If If uMsg = WM_SYSCOMMAND And wParam = 61472 Then MDIForm1.WindowState = 1 MDIForm1.Hide AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa" End If WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along End If End Function
Public Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long If Hooking = True Then If lParam = WM_LBUTTONDOWN Then SetForegroundWindow hw MDIForm1.Show MDIForm1.WindowState = 0 SetForegroundWindow hw RemoveIconFromTray Exit Function End If If uMsg = WM_SYSCOMMAND And wParam = 61472 Then MDIForm1.WindowState = 1 MDIForm1.Hide AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa" End If WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along End If End Function这是一个隐藏到系统托盘的例子,上边函数 If uMsg = WM_SYSCOMMAND And wParam = 61472 Then MDIForm1.WindowState = 1 MDIForm1.Hide AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa" End If 这一部分就是判断用户点击最小化按钮的部分,61472对应常数SC_MINMIZE
If Me.WindowState = 1 Then
MsgBox "小"
End If
End Sub
if WindowState = 0 then ‘当窗体最小时
…… '你的代码
end if
End Sub
Option ExplicitPrivate Sub MDIForm_Load()
Hook Me.hWnd
End SubPrivate Sub MDIForm_Unload(Cancel As Integer)
Unhook
End Sub模块
Option Explicit
Public Declare Function SetForegroundWindow Lib "user32" (ByVal hWnd As Long) As Long
Declare Function Shell_NotifyIcon Lib "shell32.dll" Alias "Shell_NotifyIconA" (ByVal dwMessage As Long, lpData As NOTIFYICONDATA) 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 nfIconData As NOTIFYICONDATA
Public Const WM_LBUTTONDOWN = &H201
Public Declare Function GetPixel Lib "gdi32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Public Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Public Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Public Declare Function CombineRgn Lib "gdi32" (ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Public Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Public Declare Function ReleaseCapture Lib "user32" () As Long
Public Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Public Const RGN_OR = 2
Public Const WM_NCLBUTTONDOWN = &HA1
Public Const HTCAPTION = 2
Public Const WM_RBUTTONDOWN = &H204
Public Const WM_RBUTTONUP = &H205
Public Const WM_ACTIVATEAPP = &H1C
Public Const NIF_ICON = &H2
Public Const NIF_MESSAGE = &H1
Public Const NIF_TIP = &H4
Public Const NIM_ADD = &H0
Public Const NIM_DELETE = &H2
Public Const MAX_TOOLTIP As Integer = 64
Public Const GWL_WNDPROC = (-4)
Public Const WM_LBUTTONDBLCLK = &H203Type NOTIFYICONDATA
cbSize As Long
hWnd As Long
uID As Long
uFlags As Long
uCallbackMessage As Long
hIcon As Long
szTip As String * MAX_TOOLTIP
End Type
Private FHandle As Long
Private WndProc As Long
Private Hooking As Boolean
Public Const WM_SYSCOMMAND = &H112Public Sub AddIconToTray(MeHwnd As Long, MeIcon As Long, MeIconHandle As Long, Tip As String)
With nfIconData
.hWnd = MeHwnd
.uID = MeIcon
.uFlags = NIF_ICON Or NIF_MESSAGE Or NIF_TIP
.uCallbackMessage = WM_RBUTTONUP
.hIcon = MeIconHandle
.szTip = Tip & Chr$(0)
.cbSize = Len(nfIconData)
End With
Shell_NotifyIcon NIM_ADD, nfIconData
End SubPublic Sub RemoveIconFromTray()
Shell_NotifyIcon NIM_DELETE, nfIconData
End SubPublic Sub Hook(Lwnd As Long)
If Hooking = False Then
FHandle = Lwnd
WndProc = SetWindowLong(Lwnd, GWL_WNDPROC, AddressOf WindowProc)
Hooking = True
End If
End SubPublic Sub Unhook()
If Hooking = True Then
SetWindowLong FHandle, GWL_WNDPROC, WndProc
Hooking = False
End If
End SubPublic Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
If Hooking = True Then
If lParam = WM_LBUTTONDOWN Then
SetForegroundWindow hw
MDIForm1.Show
MDIForm1.WindowState = 0
SetForegroundWindow hw
RemoveIconFromTray
Exit Function
End If
If uMsg = WM_SYSCOMMAND And wParam = 61472 Then
MDIForm1.WindowState = 1
MDIForm1.Hide
AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa"
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
End If
End Function
If Hooking = True Then
If lParam = WM_LBUTTONDOWN Then
SetForegroundWindow hw
MDIForm1.Show
MDIForm1.WindowState = 0
SetForegroundWindow hw
RemoveIconFromTray
Exit Function
End If
If uMsg = WM_SYSCOMMAND And wParam = 61472 Then
MDIForm1.WindowState = 1
MDIForm1.Hide
AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa"
End If
WindowProc = CallWindowProc(WndProc, hw, uMsg, wParam, lParam) ' Pass it along
End If
End Function这是一个隐藏到系统托盘的例子,上边函数
If uMsg = WM_SYSCOMMAND And wParam = 61472 Then
MDIForm1.WindowState = 1
MDIForm1.Hide
AddIconToTray hw, MDIForm1.Icon, MDIForm1.Icon.Handle, "fdsa"
End If
这一部分就是判断用户点击最小化按钮的部分,61472对应常数SC_MINMIZE