在vb的MDI主窗体中,怎样才能把窗体的“最大化”和“最小化”去掉。
还有怎样才能让窗体不能自由拖动(也就是固定窗体的大小)。

解决方案 »

  1.   

    Option Explicit'==去掉mdisysrm最大、最小化按钮函数申明===========
    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 Long
    Const WS_MINIMIZEBOX = &H20000
    Const WS_MAXIMIZEBOX = &H10000
    Const WS_CAPTION = &HC00000
    Const GWL_STYLE = (-16)
    Const MF_REMOVE = &H1000&Private Sub MDIForm_Load()
          '=======去掉窗体最大、最小化按钮=======
        Dim lWnd As Long
        lWnd = GetWindowLong(Me.hwnd, GWL_STYLE)
        lWnd = lWnd And Not (WS_CAPTION)
        lWnd = SetWindowLong(Me.hwnd, GWL_STYLE, lWnd)End SubPrivate Sub MDIForm_DblClick()
    End
    End Sub
      

  2.   

    在窗口属性中将BorderStyle设为3就可以了
      

  3.   

    窗口属性中将BorderStyle设为3
      

  4.   


    普通窗口的话,可以直接在属性中设定,
    如果是MDI的窗体,那么最大化、最小化须用到API函数。
      

  5.   

    chendjin(累了就休息) ( ) 正解。对于MDI窗体的设置,只能使用API函数了。
      

  6.   

    BorderStyle=1 
    MaxButton和MinButton 属性可用BorderStyle=3 
    MaxButton和MinButton 属性不可用
      

  7.   


    如果想让窗体不可自由拖动,可以使用以下方法:Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As LongPrivate Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Const SC_MOVE = &HF010&Private Const MF_REMOVE = &H1000&Private Sub Form_Load()
      Dim MyMenu As Long
      MyMenu = GetSystemMenu(Me.hwnd, False)
      RemoveMenu MyMenu, SC_MOVE, MF_REMOVE
    End Sub
      

  8.   

    請在 MDIForm 的宣告區中加入以下宣告#If Win32 Then
      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 Long
    #Else
      Private Declare Function SetWindowLong Lib "User" (ByVal hwnd As Integer, _
      ByVal nIndex As Integer, ByVal dwNewLong As Long) As Long
      Private Declare Function GetWindowLong Lib "User" (ByVal hwnd As Integer, _
      ByVal nIndex As Integer) As Long
    #End IfConst WS_MINIMIZEBOX = &H20000     '最小化
    Const WS_MAXIMIZEBOX = &H10000    '最大化
    Const GWL_STYLE = (-16)'在 MDIForm 的 MDIForm_Load 事件中加入以下程式碼
    Sub MDIForm_Load()
      Dim lWnd As Long
      lWnd = GetWindowLong(Me.hwnd, GWL_STYLE)
      lWnd = lWnd And Not (WS_MINIMIZEBOX)       '最小化
      lWnd = lWnd And Not (WS_MAXIMIZEBOX)      '最大化
      lWnd = SetWindowLong(Me.hwnd, GWL_STYLE, lWnd)
    End Sub--------------------------------------------------------------------------------
     
      

  9.   

    // 至于自动拉伸的问题偶也不知道怎么解决,等待....窗体改变大小的时候会产生Resize事件,因此也可以在MDIForm的Resize事件中处理,将窗体的四个属性值(Top、Left、Width、Height)恢复成原来的值就可以了。
      

  10.   

    我刚才说的那个是使窗体不能拖动(即不可以更改位置),如果要使窗体不能更改大小,则方法如下Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As LongPrivate Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Const SC_SIZE = &HF000&Private Const MF_REMOVE = &H1000&Private Sub Form_Load()
      Dim MyMenu As Long
      MyMenu = GetSystemMenu(Me.hwnd, False)
      RemoveMenu MyMenu, SC_SIZE, MF_REMOVE
    End Sub