我想在点击最小化按扭时,做些事情,怎么做?

解决方案 »

  1.   

    Private Sub Form_Resize()
      If Me.WindowState = 1 Then
        MsgBox "小"
      End If
    End Sub
      

  2.   

    Form_Resize事件里,判断表单的windowstate属性.
      

  3.   

    Private Sub Form_Resize()
      if WindowState = 0 then     ‘当窗体最小时
         ……    '你的代码
      end if
    End Sub
      

  4.   

    窗体
    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
      

  5.   

    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