Private 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 Declare Function AppendMenu Lib "User32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long Private Declare Function GetMenuString Lib "User32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Const WM_NCLBUTTONDBLCLK = &HA3 Const WM_NCLBUTTONDOWN = &HA1 Const HTCAPTION = 2 Const MF_STRING = &H0& Const MF_BYCOMMAND = &H0& Const SC_CLOSE = &HF060 Private hMenu As Long Private CloseStr As String '纪录Close MenuItem的字符串 Private Sub Command1_Click() '将"关闭"的那个MenuItem重新加入 Call AppendMenu(hMenu, MF_STRING, SC_CLOSE, CloseStr) '令"X"出现Enable的颜色 Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&) End Sub Private Sub Form_Load() hMenu = GetSystemMenu(Me.hwnd, 0) CloseStr = String(255, 0) 'SC_CLOSE即是"关闭"的MenuItem ID Call GetMenuString(hMenu, SC_CLOSE, CloseStr, 256, MF_BYCOMMAND) CloseStr = Left(CloseStr, InStr(1, CloseStr, Chr(0)) - 1) Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND) End Sub
窗体属性ControlBox=False 或者用API 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 Const MF_BYPOSITION = &H400& Const MF_REMOVE = &H1000& Private Sub Form_Load() Dim hSysMenu As Long, nCnt As Long hSysMenu = GetSystemMenu(Me.hwnd, False) If hSysMenu Then nCnt = GetMenuItemCount(hSysMenu) If nCnt Then '去掉'X' RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE DrawMenuBar Me.hwnd End If End If
Private Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert 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 Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long Private Const MF_BYPOSITION = &H400& Private Const MF_DISABLED = &H2&Sub Form_load() Dim hMenu As Long Dim nCount As Long
'取得系统菜单句柄 hMenu = GetSystemMenu(Me.hWnd, 0) '取得菜单项个数,为了下一步的删除最后一项 nCount = GetMenuItemCount(hMenu) '删除最后一项,也就是关闭项,这项一删除,关闭按钮就变灰了,不可用了 RemoveMenu hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION End Sub
Private Declare Function GetSystemMenu Lib "User32" (ByVal hWnd As Long, ByVal bRevert 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 Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long Private Const MF_BYPOSITION = &H400& Private Const MF_DISABLED = &H2&Sub Form_load() Dim hMenu As Long Dim nCount As Long
'取得系统菜单句柄 hMenu = GetSystemMenu(Me.hWnd, 0) '取得菜单项个数,为了下一步的删除最后一项 nCount = GetMenuItemCount(hMenu) '删除最后一项,也就是关闭项,这项一删除,关闭按钮就变灰了,不可用了 RemoveMenu hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION End Sub
Private Declare Function DeleteMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function AppendMenu Lib "User32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Declare Function GetMenuString Lib "User32" Alias "GetMenuStringA" (ByVal hMenu As Long, ByVal wIDItem As Long, ByVal lpString As String, ByVal nMaxCount As Long, ByVal wFlag As Long) As Long
Private Declare Function SendMessage Lib "User32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_NCLBUTTONDBLCLK = &HA3
Const WM_NCLBUTTONDOWN = &HA1
Const HTCAPTION = 2
Const MF_STRING = &H0&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060
Private hMenu As Long
Private CloseStr As String '纪录Close MenuItem的字符串
Private Sub Command1_Click()
'将"关闭"的那个MenuItem重新加入
Call AppendMenu(hMenu, MF_STRING, SC_CLOSE, CloseStr)
'令"X"出现Enable的颜色
Call SendMessage(hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&)
End Sub
Private Sub Form_Load()
hMenu = GetSystemMenu(Me.hwnd, 0)
CloseStr = String(255, 0)
'SC_CLOSE即是"关闭"的MenuItem ID
Call GetMenuString(hMenu, SC_CLOSE, CloseStr, 256, MF_BYCOMMAND)
CloseStr = Left(CloseStr, InStr(1, CloseStr, Chr(0)) - 1)
Call DeleteMenu(hMenu, SC_CLOSE, MF_BYCOMMAND)
End Sub
或者用API
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
Const MF_BYPOSITION = &H400&
Const MF_REMOVE = &H1000&
Private Sub Form_Load()
Dim hSysMenu As Long, nCnt As Long
hSysMenu = GetSystemMenu(Me.hwnd, False) If hSysMenu Then
nCnt = GetMenuItemCount(hSysMenu)
If nCnt Then
'去掉'X'
RemoveMenu hSysMenu, nCnt - 1, MF_BYPOSITION Or MF_REMOVE
DrawMenuBar Me.hwnd
End If
End If
我的信箱是:[email protected]
Private Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Const MF_DISABLED = &H2&Sub Form_load()
Dim hMenu As Long
Dim nCount As Long
'取得系统菜单句柄
hMenu = GetSystemMenu(Me.hWnd, 0)
'取得菜单项个数,为了下一步的删除最后一项
nCount = GetMenuItemCount(hMenu)
'删除最后一项,也就是关闭项,这项一删除,关闭按钮就变灰了,不可用了
RemoveMenu hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION
End Sub
Private Declare Function RemoveMenu Lib "User32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetMenuItemCount Lib "User32" (ByVal hMenu As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Const MF_DISABLED = &H2&Sub Form_load()
Dim hMenu As Long
Dim nCount As Long
'取得系统菜单句柄
hMenu = GetSystemMenu(Me.hWnd, 0)
'取得菜单项个数,为了下一步的删除最后一项
nCount = GetMenuItemCount(hMenu)
'删除最后一项,也就是关闭项,这项一删除,关闭按钮就变灰了,不可用了
RemoveMenu hMenu, nCount - 1, MF_DISABLED Or MF_BYPOSITION
End Sub