注意:是变成灰色,而不是消失!不要回答错了哦。

解决方案 »

  1.   

    Declare Function GetSystemMenu Lib "user32" Alias "GetSystemMenu" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function GetMenuItemInfo Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFO) As Long
     Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long
     Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long   Public Type MENUITEMINFO
        cbSize As Long
        fMask As Long
        fType As Long
        fState As Long
        wID As Long
        hSubMenu As Long
        hbmpChecked As Long
        hbmpUnchecked As Long
        dwItemData As Long
        dwTypeData As String
        cch As Long
    End Type
    Public Const SC_CLOSE = &HF060&
    Public Const xMenuID = 10&
    Public Const MIIM_STATE = &H1&
    Public Const MIIM_ID = &H2&
    Public Const WM_NCACTIVATE = &H86
    'in form module
        Dim hMenu As Long, MII As MENUITEMINFO
        hMenu = GetSystemMenu(FormName.hWnd, 0)
        MII.cbSize = Len(MII)
        MII.dwTypeData = String(80, 0)
        MII.cch = Len(MII.dwTypeData)
        MII.fMask = MIIM_STATE
        MII.wID = SC_CLOSE
        
        GetMenuItemInfo hMenu, SC_CLOSE, False, MII
        
        MII.wID = xMenuID
        MII.fMask = MIIM_ID
        SetMenuItemInfo hMenu, SC_CLOSE, False, MII
        SendMessage Me.hWnd, WM_NCACTIVATE, True, ByVal 0&
      

  2.   

    唉,我真可怜,看不懂啊,非得用API不可吗?难道没有简单点的方法吗?
    BTW,上面这个程序似乎不能使用,请赐教,非常感谢!
      

  3.   

    怎么不能用?,我们程序里就这样用的啊。
      把函数和常数及结构的声明放在标准模里。下面的Code写在Form_load里就可以试一试。不过你可以自己组织一下写成过程。
      
      不用非Api可能不行,因为Vb对菜单的操作是非常弱的。
      

  4.   

    标准模块
    Declare Function GetSystemMenu Lib "user32" (ByVal hwnd As Long, ByVal bRevert As Long) As Long
    Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As Long
    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
    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
    Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long窗体
    Option Explicit
    Private hMenu As Long
     Private CloseStr As String
     Const WM_NCLBUTTONDBLCLK = &HA3
    Const WM_NCLBUTTONDOWN = &HA1
    Const HTCAPTION = 2
    Const MF_STRING = &H0&
    Const MF_BYCOMMAND = &H0&
    Const SC_CLOSE = &HF060Private Sub Command2_Click()
     hMenu = GetSystemMenu(Form1.hwnd, 0)
     CloseStr = String(255, 0)
     GetMenuString hMenu, SC_CLOSE, CloseStr, 256, MF_BYCOMMAND
     CloseStr = Left(CloseStr, InStr(1, CloseStr, Chr(0)) - 1)
     DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND
     SendMessage hwnd, WM_NCLBUTTONDOWN, HTCAPTION, 0&
    End Sub
      

  5.   

    不好意思, GetMenuItemInfo 应该声明为 public
      hMenu = GetSystemMenu(FormName.hWnd, 0) 更正为hMenu = GetSystemMenu(me.hWnd, 0)
      
      danielinbiti(金)的方法是移除菜单的方法,而我的方法只是屏蔽掉。
      

  6.   

    http://vbboshi.myrice.com/magazine/list_11-20/mag_files/mag(14).htm