Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long Private Const GWL_STYLE = (-16) Private Const WS_THICKFRAME = &H40000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_MAXIMIZEBOX = &H10000 Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long ' Const MF_BYPOSITION = &H400& Const MF_REMOVE = &H1000& Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long Dim hSysMenu As Long, nCnt As Long hSysMenu = GetSystemMenu(Me.hwnd, False) If hSysMenu Then nCnt = GetMenuItemCount(hSysMenu) If nCnt Then RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE RemoveMenu hSysMenu, nCnt, MF_BYPOSITION Or MF_REMOVE DrawMenuBar Me.hwnd End If End If SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Xor _ (WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX) GetSystemMenu Me.hwnd, 1& SetWindowLong Me.hwnd, GWL_STYLE, MY_DIALOG这个应该可以解决不少问题,你试试吧
对了,忘了说 Dim hSysMenu As Long, nCnt As Long hSysMenu = GetSystemMenu(Me.hwnd, False) If hSysMenu Then nCnt = GetMenuItemCount(hSysMenu) If nCnt Then RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE RemoveMenu hSysMenu, nCnt, MF_BYPOSITION Or MF_REMOVE DrawMenuBar Me.hwnd End If End If SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Xor _ (WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX) GetSystemMenu Me.hwnd, 1& SetWindowLong Me.hwnd, GWL_STYLE, MY_DIALOG这部分放在FORM_LOAD中
to holydiablo(鱼头) MY_DIALOG 这个怎么定义呀。
Option Explicit Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const WS_MAXIMIZEBOX = &H10000 Private Const WS_MINIMIZEBOX = &H20000 Private Const WS_THICKFRAME = &H40000Private Const GWL_STYLE = (-16)Private Sub MDIForm_Load() Dim TempLng As Long
TempLng = GetWindowLong(Me.hwnd, GWL_STYLE) TempLng = TempLng And Not WS_MINIMIZEBOX '隐藏最小化 TempLng = TempLng And Not WS_MAXIMIZEBOX '禁用最大化 TempLng = TempLng And Not WS_THICKFRAME '禁用可改变大小的边框 SetWindowLong Me.hwnd, GWL_STYLE, TempLng
Public Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long '取得指定窗口的系统菜单的句柄 Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long '删除指定的菜单条目 Public Const MF_BYPOSITION = &H400&
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Const GWL_STYLE = (-16)
Private Const WS_THICKFRAME = &H40000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_MAXIMIZEBOX = &H10000
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
'
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Dim hSysMenu As Long, nCnt As Long
hSysMenu = GetSystemMenu(Me.hwnd, False)
If hSysMenu Then
nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then
RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE
RemoveMenu hSysMenu, nCnt, MF_BYPOSITION Or MF_REMOVE
DrawMenuBar Me.hwnd
End If
End If
SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Xor _
(WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
GetSystemMenu Me.hwnd, 1&
SetWindowLong Me.hwnd, GWL_STYLE, MY_DIALOG这个应该可以解决不少问题,你试试吧
hSysMenu = GetSystemMenu(Me.hwnd, False)
If hSysMenu Then
nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then
RemoveMenu hSysMenu, nCnt - 3, MF_BYPOSITION Or MF_REMOVE
RemoveMenu hSysMenu, nCnt, MF_BYPOSITION Or MF_REMOVE
DrawMenuBar Me.hwnd
End If
End If
SetWindowLong Me.hwnd, GWL_STYLE, GetWindowLong(hwnd, GWL_STYLE) Xor _
(WS_THICKFRAME Or WS_MINIMIZEBOX Or WS_MAXIMIZEBOX)
GetSystemMenu Me.hwnd, 1&
SetWindowLong Me.hwnd, GWL_STYLE, MY_DIALOG这部分放在FORM_LOAD中
MY_DIALOG 这个怎么定义呀。
Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPrivate Const WS_MAXIMIZEBOX = &H10000
Private Const WS_MINIMIZEBOX = &H20000
Private Const WS_THICKFRAME = &H40000Private Const GWL_STYLE = (-16)Private Sub MDIForm_Load()
Dim TempLng As Long
TempLng = GetWindowLong(Me.hwnd, GWL_STYLE)
TempLng = TempLng And Not WS_MINIMIZEBOX '隐藏最小化
TempLng = TempLng And Not WS_MAXIMIZEBOX '禁用最大化
TempLng = TempLng And Not WS_THICKFRAME '禁用可改变大小的边框
SetWindowLong Me.hwnd, GWL_STYLE, TempLng
End Sub
'取得指定窗口的系统菜单的句柄
Public Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
'删除指定的菜单条目
Public Const MF_BYPOSITION = &H400&