如题

解决方案 »

  1.   

    BorderStyle 属性常数
    BorderStyle 属性(窗体)
    常数 值 描述 
    vbBSNone 0 无边框 
    vbFixedSingle 1 固定单线框 
    vbSizable 2 可变尺寸框(仅对窗体) 
    vbFixedDoubleialog 3 固定双线框(仅对窗体) 
    vbFixedToolWindow 4 固定工具窗口 
    vbSizableToolWindow 5 可变工具窗口 
      

  2.   

    MDI窗口没有BorderStyle 属性
      

  3.   

    申明必要的API函数,如下调用:Public Declare Function GetWindowLong Lib "user32" _
           Alias "GetWindowLongA" _
           (ByVal hwnd As Long, _
            ByVal nIndex As Long) _
            As Long
            
    Public Declare Function SetWindowLong Lib "user32" _
           Alias "SetWindowLongA" _
           (ByVal hwnd As Long, _
            ByVal nIndex As Long, _
            ByVal dwNewLong As Long) _
            As LongPublic Const GWL_STYLE = (-16)
    Public Const WS_MAXIMIZEBOX = &H10000'窗体载入
    '---------------------------------------------------------
    Private Sub MDIForm_Load()
        
        Dim lWinStyle As Long
        
        '屏蔽窗体的最大化按钮
        lWinStyle = GetWindowLong(hwnd, GWL_STYLE) And Not WS_MAXIMIZEBOX
        Call SetWindowLong(hwnd, GWL_STYLE, lWinStyle)    Me.Width = 11910: Me.Height = 8910  '定义窗体的大小,保证背景图的显示效果
       
    End Sub
      

  4.   

    運用子類化技術:
    窗體代碼:
    Private Sub Form_Load()
        LockWindow Me.hWnd, 100, 100, 400, 400
    End Sub
    模塊代碼:
    Option ExplicitPrivate Declare Function SetWindowLong Lib "User32" Alias _
        "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (lpDest As Any, lpSource As Any, ByVal cBytes&)
    Private Declare Function CallWindowProc& Lib "User32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)Private Type POINTAPI
        x As Long
        y As Long
    End TypePrivate Type MINMAXINFO
        ptReserved As POINTAPI
        ptMaxSize As POINTAPI
        ptMaxPosition As POINTAPI
        ptMinTrackSize As POINTAPI
        ptMaxTrackSize As POINTAPI
    End TypePrivate procOld As Long
    Private udtMMI As MINMAXINFOPrivate Function WindowProc(ByVal hWnd As Long, ByVal iMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
        Select Case iMsg
            Case &H24 'WM_GETMINMAXINFO=&H24
            Dim udtMINMAXINFO As MINMAXINFO
            CopyMemory udtMINMAXINFO, ByVal lParam, 40&
            With udtMINMAXINFO
                .ptMaxSize.x = udtMMI.ptMaxSize.x
                .ptMaxSize.y = udtMMI.ptMaxSize.y
                .ptMaxPosition.x = 0
                .ptMaxPosition.y = 0
                .ptMaxTrackSize.x = .ptMaxSize.x
                .ptMaxTrackSize.y = .ptMaxSize.y
                .ptMinTrackSize.x = udtMMI.ptMinTrackSize.x
                .ptMinTrackSize.y = udtMMI.ptMinTrackSize.y
                'Debug.Print .ptMaxSize.x & "," & .ptMaxSize.y
            End With
            CopyMemory ByVal lParam, udtMINMAXINFO, 40&
            WindowProc = False
            Exit Function
        End Select
        WindowProc = CallWindowProc(procOld, hWnd, iMsg, wParam, lParam)
    End Function
         
    Public Sub LockWindow(hWnd As Long, Optional MinWidth As Long, Optional MinHeight As Long, Optional MaxWidth As Long, Optional MaxHeight As Long)
        With udtMMI
            '指定窗体最小寬度
            If MinWidth = 0 Then .ptMinTrackSize.x = 0 Else .ptMinTrackSize.x = MinWidth
            '指定窗体最小高度
            If MinHeight = 0 Then .ptMinTrackSize.y = 0 Else .ptMinTrackSize.y = MinHeight
            '指定窗体最大寬度
            If MaxWidth = 0 Then .ptMaxSize.x = Screen.Width \ Screen.TwipsPerPixelX Else .ptMaxSize.x = MaxWidth
            '指定窗体最大高度
            If MaxHeight = 0 Then .ptMaxSize.y = Screen.Width \ Screen.TwipsPerPixelX Else .ptMaxSize.y = MaxHeight
        End With
        procOld = SetWindowLong(hWnd, -4, AddressOf WindowProc)
    End Sub