http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=194220 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 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 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 RemoveMenu Lib "USER32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long Private Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long Private Const MF_BYPOSITION = &H400& Private Const MF_REMOVE = &H1000&
Private Sub DisableX() Dim hMenu, nCount, LO As Long hMenu = GetSystemMenu(Me.hwnd, 0) nCount = GetMenuItemCount(hMenu) LO = RemoveMenu(hMenu, nCount - 1, MF_REMOVE Or MF_BYPOSITION) LO = RemoveMenu(hMenu, nCount - 2, MF_REMOVE Or MF_BYPOSITION) End Sub
Private Sub Form_Load() Call DisableX End Sub
http://www.china-askpro.com/msg4/qa64.shtml
Private Sub Form_Unload(Cancel As Integer) Cancel = 1 End Sub
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 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
Const MF_STRING = &H0&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060
Private hMenu As Long
Private CloseStr As String '记录Close MenuItem的字串
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
---------------------------------------------------------------
简单一些的
Option Explicit
Dim Exit_Flag As Boolean ' 用来标记是否正常退出
' 如果选择退出按钮,则退出标记为真
Private Sub Exit_Cmd_Click()
Exit_Flag = True
End
End Sub
Private Sub Form_Load()
Exit_Flag = False
End Sub
' 根据退出标记,决定是否退出
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If Exit_Flag = False Then
Cancel = -1
End If
End Sub
---------------------------------------------------------------
新建一个EXE,贴下面代码:再运行
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 RemoveMenu Lib "USER32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function DrawMenuBar Lib "USER32" (ByVal hwnd As Long) As Long
Private Const MF_BYPOSITION = &H400&
Private Const MF_REMOVE = &H1000&
Private Sub DisableX()
Dim hMenu, nCount, LO As Long
hMenu = GetSystemMenu(Me.hwnd, 0)
nCount = GetMenuItemCount(hMenu)
LO = RemoveMenu(hMenu, nCount - 1, MF_REMOVE Or MF_BYPOSITION)
LO = RemoveMenu(hMenu, nCount - 2, MF_REMOVE Or MF_BYPOSITION)
End Sub
Private Sub Form_Load()
Call DisableX
End Sub
Cancel = 1
End Sub