我要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里也是这样,高手告诉我为什么??????

解决方案 »

  1.   

    我先声明:不是这个函数DeleteMenu 的毛病,换成EnableMenuItem也一样
      

  2.   

    delete的时机是否选的不太合适.比如load的时候可以换成active
      

  3.   

    yunfeng007(一水寒):你能说清楚点吗?
      

  4.   

    TO sektor(sektor):肯定不行,我试过,VB6 SP5E有关系吗
      

  5.   

    'vb6+sp6测试
    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
      

  6.   

    hMenu = GetSystemMenu(Me.hwnd, False)
        Num = GetMenuItemCount(hMenu)    <=====================1
      DeleteMenu hMenu, Num - 1, MF_BYPOSITION <===============21 处你得到的是....看到一个count,以为是某菜的总数
    2 处删除了num-1,是index吗?或者?不知道你的delete函数的参数,猜测实际取得的关闭菜项的"index"是num-1吗?如果可以,不妨把get del函数全发上来
      

  7.   

    大哥,这是系统API,如果那是错的,就不会有效,只是多次执行,
      

  8.   

    TO: hellobcb(学海无涯,回头是岸) 
        你的是对的,一次搞定,但无论是REMOVE还是DELETE,最后的结果是不可能删除关闭菜单的?
        最后的结果只是DISABLE,可不可以完全删了呀。