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
感谢大家对我问题热心的回答,经过查找整理,已把这部分搞好了。为了让以后别人查询,特将程序贴上: 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窗体无法改变大小,切菜单栏右击没有最大化选项。窗体右上方最大化和最下化被删除了。
Private Sub MDIForm_Resize()
On Error Resume Next
Me.Width = VB.Screen.Width * 0.5
Me.Height = VB.Screen.Height * 0.5
End Sub
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
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窗体无法改变大小,切菜单栏右击没有最大化选项。窗体右上方最大化和最下化被删除了。