把窗体的大小固定,不能随意改变,怎么实现呢?请大家多指教,谢谢!

解决方案 »

  1.   

    我觉得最合理的方法还是处理WM_GETMINMAXINFO消息,在Form_resize里写代码会有很多不好的效果。Form1.boderstyle = 1会没有了最小化按纽,这也许并不是用户所期望的。Public Const GWL_WNDPROC As Long = (-4)
    Public Const WM_GETMINMAXINFO As Long = &H24Public Type POINTAPI
        x As Long
        y As Long
    End TypeType MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
    End Type
    Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private 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
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Public DefWindowProc As Long
    Public minX As Long, minY As Long
    Public maxX As Long, maxY As Long
    Public Function WindowProc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case uMsg
        Case WM_GETMINMAXINFO
            Dim MMI As MINMAXINFO
            CopyMemory MMI, ByVal lParam, LenB(MMI)
             With MMI
                .ptMinTrackSize.x = minX
                .ptMinTrackSize.y = minY
                .ptMaxTrackSize.x = maxX
                .ptMaxTrackSize.y = maxY
            End With
            CopyMemory ByVal lParam, MMI, LenB(MMI)
            WindowProc = 0
        Case Else
            WindowProc = CallWindowProc(DefWindowProc, hwnd, uMsg, wParam, lParam)
        End Select
    End Function
    Private Sub Form_Load()
        minX = 400   '如果把minX/minY和maxX/maxY设置为相等,则不可以改变窗体大小
        minY = 400
        maxX = 600
        maxY = 600
        DefWindowProc = SetWindowLong(Me.hwnd, GWL_WNDPROC, AddressOf WindowProc)
    End SubPrivate Sub Form_Unload(Cancel As Integer)
        SetWindowLong Me.hwnd, GWL_WNDPROC, DefWindowProc
        DefWindowProc = 0
    End Sub
      

  2.   

    先设置form1.boderstyle = 1
    再设置minbutton=true
    就可以使用最小化按钮了