一般在任务栏中的右键菜单是还原,移动,大小,最小化,最大化,关闭
我想再添加几个,请问如何实现?

解决方案 »

  1.   

    http://www.mndsoft.com/blog/blogview.asp?logID=67
      

  2.   

    Option ExplicitPrivate Declare Function InsertMenu Lib "user32" Alias "InsertMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
    Private Declare Function GetSystemMenu Lib "user32" (ByVal hWnd As Long, ByVal bRevert As Long) As Long
    Private Declare Function DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
    Private Declare Function SetMenuItemBitmaps Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
    Private Declare Function SetWindowLong& Lib "user32" Alias "SetWindowLongA" (ByVal hWnd&, ByVal nIndex&, ByVal dwNewLong&)
    Private Declare Function DeleteMenu Lib "user32" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long) As LongPrivate Const SC_CLOSE As Long = &HF060&Private Const GWL_WNDPROC As Long = (-4&)Private Const MF_BYCOMMAND As Long = &H0&
    Private Const MF_BYPOSITION As Long = &H400&
    Private Const MF_SEPARATOR As Long = &H800&
    Private Const MF_CHECKED As Long = &H8&
    Private Const MF_GRAYED As Long = &H1&
    Private Const MF_BITMAP = &H4&Private Sub Form_Load()
        Dim hMenu As Long, hID As Long
        hMenu = GetSystemMenu(Me.hWnd, 0)
        'add a item in first pos
        InsertMenu hMenu, &H0, MF_BYPOSITION, IDM.a, "演示菜单一"
       
        'add a checked item before close item
        InsertMenu hMenu, SC_CLOSE, MF_BYCOMMAND + MF_CHECKED, IDM.b, "选择后关闭(&B)"
        ''add separator after close item
        InsertMenu hMenu, SC_CLOSE, MF_BYCOMMAND + MF_SEPARATOR, 0&, vbNullString
        ''add item (after the last item)
        InsertMenu hMenu, &HFFFFFFFF, 0&, IDM.c, "我要关闭(&N)"
        ''add a disabled item
        InsertMenu hMenu, &HFFFFFFFF, MF_GRAYED, IDM.d, "选项(&O)"
        'add a separator
        
        InsertMenu hMenu, &HFFFFFFFF, MF_BYCOMMAND + MF_SEPARATOR, 0&, vbNullString
        
        InsertMenu hMenu, &HFFFFFFFF, MF_BYPOSITION, IDM.e, "演示菜单二(&L)"
        
        '刷新菜单
        DrawMenuBar hMenu
        
        '画图标
        hID& = GetMenuItemID(hMenu&, 13)
        'SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture1.Picture, Picture1.Picture
        
        '画图标
        hID& = GetMenuItemID(hMenu&, 0)
        'SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, Picture2.Picture, Picture2.Picture
        
        '删除关闭项
        DeleteMenu hMenu, SC_CLOSE, MF_BYCOMMAND
        'subclass
      
        procOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)End SubPrivate Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
        procOld = SetWindowLong(hWnd, GWL_WNDPROC, procOld)
    End Sub
    '''模块
    '******************************************************
    '我为人人
    '人人为我
    '枕善居汉化收藏整理
    'http://www.mndsoft.com/blog/
    'e-mail:[email protected]
    '2005.03.02
    '******************************************************
    Option ExplicitPublic Enum IDM
        a = 128
        b
        c
        d
        e
    End Enum
    Public procOld As Long
    Private Declare Function CallWindowProc& Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc&, ByVal hWnd&, ByVal Msg&, ByVal wParam&, ByVal lParam&)
    Private Const WM_SYSCOMMAND = &H112Public Function WindowProc(ByVal hWnd As Long, _
    ByVal iMsg As Long, ByVal wParam As Long, _
    ByVal lParam As Long) As Long   Select Case iMsg
          Case WM_SYSCOMMAND
             Select Case wParam
             Case IDM.a
                MsgBox "您单击了'演示菜单一',事件:Cliked"
             Case IDM.b
                MsgBox "'您单击了'选择后关闭' 事件:Cliked"
             Case IDM.c
                MsgBox "好了,再见,欢迎下次光临枕善居", vbInformation, "再见"
                Unload Form1
                Exit Function
             Case IDM.e
                MsgBox "您单击了'演示菜单二' 事件:Cliked"
             End Select
       End Select    WindowProc = CallWindowProc(procOld, hWnd, iMsg, wParam, lParam)
    End Function
      

  3.   

    删除系统菜单时为何"移动"一项删不了? HF012代表什么?Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong 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 DrawMenuBar Lib "user32" (ByVal hWnd As Long) As Long
    Private Const MF_BYCOMMAND As Long = &H0&
    Private Const SC_MOVE As Long = &HF012
    Private Sub Command1_Click()
        Dim hMenu As Long, hID As Long
        DeleteMenu hMenu, SC_MOVE, MF_BYCOMMAND
        DrawMenuBar hMenu
        procOld = SetWindowLong(hWnd, GWL_WNDPROC, AddressOf WindowProc)
    End Sub
      

  4.   

    知道了,Private Const SC_MOVE As Long = &HF012 中的"&HF012"改成"&HF010"就OK了.