小弟在做MDI父窗体时,里面加载了一个子窗体。即使我设置子窗体为固定值(就是大小不可改变),但父窗体的大小还是可以改变啊。求大侠教教如何使父窗体大小固定啊?

解决方案 »

  1.   

    把父窗体最大化按钮去掉,然后用一下代码
    Private Sub MDIForm_Resize()
        On Error Resume Next
        Me.Width = VB.Screen.Width * 0.5
        Me.Height = VB.Screen.Height * 0.5
    End Sub
      

  2.   

    在子窗体form的resize属性中设置子窗体的top和left可以固定子窗体的位置,Width和Height可以设置子窗体的宽度和高度
      

  3.   

    Private Const WS_MAXIMIZEBOX As Long = &H10000
    Private Const WS_THICKFRAME As Long = &H40000
    Private Const WS_MINIMIZEBOX = &H20000
    Private Const GWL_STYLE = (-16)
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As LongPrivate Sub MDIForm_Load()
            Dim TempLng As Long        TempLng = GetWindowLong(Me.hwnd, GWL_STYLE)
            TempLng = TempLng And Not WS_MAXIMIZEBOX             '禁 最大化
            TempLng = TempLng And Not WS_MINIMIZEBOX             '禁 最小化
            TempLng = TempLng And Not WS_THICKFRAME              '禁 由边框改变窗体大小
            SetWindowLong Me.hwnd, GWL_STYLE, TempLng
    End Sub
      

  4.   

    感谢大家对我问题热心的回答,经过查找整理,已把这部分搞好了。为了让以后别人查询,特将程序贴上:
    Option Explicit
    Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate 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 Long
    Private Const MF_BYPOSITION = &H400&Private Const GWL_STYLE = (-16)Private Const WS_MAXIMIZEBOX = &H10000Private Const WS_MINIMIZEBOX = &H20000
    Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongPrivate Sub MDIForm_Load()
            Dim hStyle     As Long
            hStyle = GetWindowLong(Me.hWnd, GWL_STYLE)
            hStyle = hStyle And Not WS_MAXIMIZEBOX
            hStyle = hStyle And Not WS_MINIMIZEBOX
            hStyle = SetWindowLong(Me.hWnd, GWL_STYLE, hStyle)
            
            
                Dim dwStyle     As Long        dwStyle = GetSystemMenu(Me.hWnd, 0)
            If dwStyle <> 0 Then
                    DeleteMenu dwStyle, 4, MF_BYPOSITION
                    DeleteMenu dwStyle, 3, MF_BYPOSITION
                    DeleteMenu dwStyle, 2, MF_BYPOSITION
                    DeleteMenu dwStyle, 0, MF_BYPOSITION
            End If
    End Sub
    实现MDI窗体无法改变大小,切菜单栏右击没有最大化选项。窗体右上方最大化和最下化被删除了。