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 LongConst MF_STRING = &H0& Const MF_BYCOMMAND = &H0& Const SC_CLOSE = &HF060Private 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
没必要这么烦啦!!!用BORDSTYLE设置为0就可以啦!!就没有那个啦!或者你在 form1_unload(cancel as integer) cancel=1 end sub 就差不多啦!具体语法你自己查一下!!!!
form1_unload(cancel as integer) cancel=true end sub
简单一些的 Option Explicit Dim Exit_Flag As Boolean ' 用来标记是否正常退出' 如果选择退出按钮,则退出标记为真 Private Sub Exit_Cmd_Click() Exit_Flag = True End End SubPrivate 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 SubPrivate Sub Form_Load() Call DisableX End Sub
其实很简单,只要在窗体的QueryUnload事件中令cancel变量为true就可以了,此QueryUnload事件会在关闭窗体前处理“善后”工作,包括是否真正关闭窗体。例: Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Cancel = True End Sub 当然如果你在有些情况下真的要关闭窗体,可以对UnloadMode的值进行判断,具体的你可以看MSDN有详细的常量解释。
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 LongConst MF_STRING = &H0&
Const MF_BYCOMMAND = &H0&
Const SC_CLOSE = &HF060Private 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
form1_unload(cancel as integer)
cancel=1
end sub
就差不多啦!具体语法你自己查一下!!!!
cancel=true
end sub
Option Explicit
Dim Exit_Flag As Boolean ' 用来标记是否正常退出' 如果选择退出按钮,则退出标记为真
Private Sub Exit_Cmd_Click()
Exit_Flag = True
End
End SubPrivate 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
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 SubPrivate Sub Form_Load()
Call DisableX
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
Cancel = True
End Sub
当然如果你在有些情况下真的要关闭窗体,可以对UnloadMode的值进行判断,具体的你可以看MSDN有详细的常量解释。