不用这样吧,用setwindowlong api 拦截 syscommand 消息。

解决方案 »

  1.   

    to : jennyvenus() 我对 SetWindowLong 这上API不是很熟悉,你能详细点吗?
      

  2.   

    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As Long
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const GWL_STYLE = (-16)Private Const WS_MAXIMIZEBOX = &H10000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const WS_THICKFRAME = &H40000
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Const SC_MAXIMIZE = &HF030&Private Const MF_BYCOMMAND = &H0&Private Sub MDIForm_Load()
        Dim TempLng As Long
        
        TempLng = GetWindowLong(Me.hWnd, GWL_STYLE)
        'TempLng = TempLng And Not WS_MINIMIZEBOX '隐藏最小化
        TempLng = TempLng And Not WS_MAXIMIZEBOX '禁用最大化
        TempLng = TempLng And Not WS_THICKFRAME '禁用可改变大小的边框
        SetWindowLong Me.hWnd, GWL_STYLE, TempLng
        
        TempLng = GetSystemMenu(Me.hWnd, 0)
        DeleteMenu TempLng, SC_MAXIMIZE, MF_BYCOMMAND
        
    End Sub
      

  3.   

    zyl910(910:分儿,我来了!) 的方法好象也不能解决好对最小化按钮的处理。如果只是简单的让窗体不能最小化和还原,我只要将它的BorderStyle设为3就行了。我的目的是根据不同的情况来决定窗体是否能最小化,最大化,还原。本来我以为用DeleteMenu ,GetSystemMenu 就能办到的,但用这种方法虽然能控制,但不能在窗体上直观的显示出来。不知你们注意到没有,MicroSoft的许多安装程序里的窗体的右上角最小化按钮都是灰色的。我就是想要那样的效果。