在form1_resize事件下。判断form1.WindowState 
 2 max
 0 normal
 1 min
这样可以得到现在状态,不过我还没找到可以先取得控制权的方法。

解决方案 »

  1.   

    正如baoxiang(包香)所说,当你按下些按钮的时候,发生了 
    form1_resize 事件。不知道你说的控制是什么意思,但是你可以在resize事件中强制
    me.windowstate=0
    me.width=xxxx
    me.height=xxxx
    ....等等。
      

  2.   

    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
      

  3.   

    以上是程序能先取得控制权,弹出一个确认框来,可以关闭也可以不关闭
    '*****************在resize事件中强制
    Private Sub Form_Resize()
        Select Case Me.WindowState
            Case 0
                '‘窗体正常时的程序代码
            Case 1
                '‘窗体最小化时的程序代码
            Case 2
                '‘窗体最大化时的程序代码
        End Select
    End Sub 
      

  4.   

    用HOOK截获窗体最小化等消息~
      

  5.   

    to fishzone(阿愚)
    我想,iamdan的意思是在窗体变化前来看控制变化。
    但现在的做法,只能在窗体变化后从新恢复。
      

  6.   

    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
        
        
        WndProc = CallWindowProc(preWndProc, hWnd, Msg, wParam, lParam)
        
    End Function
      

  7.   

    至于用hook吗?这是WM_SYSCOMMAND的子消息。
    方法如上。楼上的方法少一层select case Msg,但效果一样。
      

  8.   

    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