我要DISABLE系统的“关闭“按钮,我在MDICHILD为TRUE的FORM_LOAD里使用下列语句:
hMenu = GetSystemMenu(Me.hwnd, False)
Num = GetMenuItemCount(hMenu)
DeleteMenu hMenu, Num - 1, MF_BYPOSITION
但为了达到效果,我却只能这样:
For i = 0 To 10
hMenu = GetSystemMenu(Me.hwnd, False)
Num = GetMenuItemCount(hMenu)
DeleteMenu hMenu, Num - 1, MF_BYPOSITION
Next
因为我发现一次调用没有效果,只能3次以上,我索性来了个11次,不过我不懂为什么会出现这样的问题,在FORM的其它消息处理SUB里也是这样,高手告诉我为什么??????
hMenu = GetSystemMenu(Me.hwnd, False)
Num = GetMenuItemCount(hMenu)
DeleteMenu hMenu, Num - 1, MF_BYPOSITION
但为了达到效果,我却只能这样:
For i = 0 To 10
hMenu = GetSystemMenu(Me.hwnd, False)
Num = GetMenuItemCount(hMenu)
DeleteMenu hMenu, Num - 1, MF_BYPOSITION
Next
因为我发现一次调用没有效果,只能3次以上,我索性来了个11次,不过我不懂为什么会出现这样的问题,在FORM的其它消息处理SUB里也是这样,高手告诉我为什么??????
Option Explicit
'添加删除按钮
Private Declare Function RemoveMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
Private Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert 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 DrawMenuBar Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
Private Const MF_REMOVE = &H1000&
Private Const SC_CLOSE = &HF060&
Private Const MF_APPEND = &H100&
Dim countMnu As IntegerPrivate Sub cmdEnable_Click()
Call CloseBtn(Me.hwnd, True, countMnu) '使关闭按钮生效
End SubPrivate Sub Form_Load()
countMnu = TotalMenu(Me.hwnd)
Call CloseBtn(Me.hwnd, False, countMnu) '使关闭按钮失效
End SubPrivate Sub CloseBtn(ByVal hwnd As Long, ByVal blnEnabled As Boolean, ByVal intCount As Integer)
Dim lngSysMenu As Long, lngCount As Long
lngSysMenu = GetSystemMenu(hwnd, False)
lngCount = GetMenuItemCount(lngSysMenu)
If blnEnabled And _
lngCount < intCount Then
AppendMenu lngSysMenu, MF_APPEND, SC_CLOSE, ""
ElseIf blnEnabled = False And _
lngCount = intCount Then
RemoveMenu lngSysMenu, SC_CLOSE, MF_REMOVE
End If
DrawMenuBar hwndEnd Sub
Private Function TotalMenu(ByVal hwnd As Long) As Integer
Dim lngSysMenu As Long
lngSysMenu = GetSystemMenu(hwnd, False)
TotalMenu = GetMenuItemCount(lngSysMenu)
End Function
Num = GetMenuItemCount(hMenu) <=====================1
DeleteMenu hMenu, Num - 1, MF_BYPOSITION <===============21 处你得到的是....看到一个count,以为是某菜的总数
2 处删除了num-1,是index吗?或者?不知道你的delete函数的参数,猜测实际取得的关闭菜项的"index"是num-1吗?如果可以,不妨把get del函数全发上来
你的是对的,一次搞定,但无论是REMOVE还是DELETE,最后的结果是不可能删除关闭菜单的?
最后的结果只是DISABLE,可不可以完全删了呀。