windows的开始菜单以及foxmail之类程序的托盘菜单左边都有一条竖状图片,不知如何实现,忘告之,凡提供有价值信息或甚至解决问题者给分。(得是菜单,用窗口冒充菜单的不算)

解决方案 »

  1.   

    下面的这段代码将Picture1的图形作为菜单项。 
        首先建立一个模块,并加入下面的语句。 
        Declare Function GetMenu Lib "user32" _ 
         (ByVal hwnd As Long) As Long 
        Declare Function GetSubMenu Lib "user32" _ 
         (ByVal hMenu As Long, ByVal nPos As Long) As Long 
        Declare Function GetMenuItemID Lib "user32" _ 
         (ByVal hMenu As Long, ByVal nPos As Long) As Long 
        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 
         
        Public Const MF_BITMAP = &H4& 
         
        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 
         
        Declare Function GetMenuItemCount Lib "user32" _ 
         (ByVal hMenu As Long) As Long 
        Declare Function GetMenuItemInfo Lib "user32" _ 
         Alias "GetMenuItemInfoA" (ByVal hMenu As Long, _ 
         ByVal un As Long, ByVal b As Boolean, _ 
         lpMenuItemInfo As MENUITEMINFO) As Boolean 
         
        Public Const MIIM_ID = &H2 
        Public Const MIIM_TYPE = &H10 
        Public Const MFT_STRING = &H0& 
        将下面的代码加入一个按钮的Click事件: 
        Private Sub Command1_Click() 
         
        ' 获得你的菜单的句柄 
        hMenu& = GetMenu(Form1.hwnd) 
         
        ' 获得第一个子菜单的句柄 
        hSubMenu& = GetSubMenu(hMenu&, 0) 
         
        ' 获得第一个菜单项 
        hID& = GetMenuItemID(hSubMenu&, 0) 
         
        '加入位图 
         
        SetMenuItemBitmaps hMenu&, hID&, MF_BITMAP, _ 
         Picture1.Picture, _ 
         Picture1.Picture 
        End Sub 
        上面的代码使菜单项为图片,如果你只希望菜单项的左边有一个小位图,而右边仍为文字。可以先在Picture1绘制图片,在利用Picture1.Print加上文字,然后用Picture1.Picture加入菜单项。
      

  2.   

    自绘菜单!简单例子:http://cocgame.myetang.com/zyl910/gui/drawmenu-s.zip开始菜单:http://www.dapha.net/vb/upload/upfile/source/20011226959450menu.zip
      

  3.   

    这问题找狗狗就对了 
    我连金山词霸2003的菜单都做出了哦 还有动画的哦!
    http://www.imeic.net/shadow/code/shadowwinmenu.zip 绝对原版 
    狗狗一到问题全解 呵呵
    http://vbcc.126.com
      

  4.   

    是金山快意(译) 最近vbgood上不去只好在这混了
      

  5.   

    又摘代码了呵呵 如果都买我的编程光盘就好了 不过还没出呢 '类模块
    Option Explicit
    '========================================================================================
    ' Alarm Clock 1.05
    ' 版权所有(C) 2001-2002  江建及其两位女友
    ' 本代码摘自我的 Alarm Clock
    ' Alarm Clock 下载地址:http://h.7i24.com/vbcc/work/setup.exe
    '=======================================================================================
    '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    ' 本程序可以看看 MSDN
    ' 我建议大家参照 MSDN 然后自己写不要直接拷贝我的程序
    ' 因为这样你可能学不到东西。
    ' 用 VB 的集合来存储菜单的文字。(用API可以创建所有的菜单)
    ' 如果用物主绘图可以创建任何风格的菜单(Office 97, OICQ, Windows XP)
    ' (建议 从资源文件中创建菜单 你可以用 宝蓝的 Delphi 或 C++ 光盘中的
    ' Resource Workshop)来创建资源文件和对话框(以及基本的控件)
    ' 有那位能告诉我VB怎么从指针取结构的数据
    '=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
    Private Declare Function CreateMenu Lib "user32" () As Long
    Private Declare Function CreatePopupMenu Lib "user32" () As Long
    Private Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, ByRef lpcMenuItemInfo As MENUITEMINFO) As LongPrivate Declare Function SetMenu Lib "user32" (ByVal hWnd As Long, ByVal hMenu As Long) As Long
    Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
    Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function SetMenuItemInfo Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) 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
    Private Declare Function SetMenuItemInfoLong Lib "user32" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFOLONG) As Long
    Private Declare Function GetMenuItemInfoLong Lib "user32" Alias "GetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal b As Long, lpMenuItemInfo As MENUITEMINFOLONG) As LongPrivate Declare Function GetMenuItemCount Lib "user32" (ByVal hMenu As Long) As Long
    Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
    Private Declare Function TrackPopupMenu Lib "user32" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal X As Long, ByVal Y As Long, ByVal nReserved As Long, ByVal hWnd As Long, ByVal lprc As Any) As LongPrivate Declare Function BitBlt Lib "gdi32" (ByVal hDestDc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal dwRop As Long) As Long
    Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc As Long, ByVal X As Long, ByVal Y As Long, ByVal nWidth As Long, ByVal nHeight As Long, ByVal hSrcDC As Long, ByVal xSrc As Long, ByVal ySrc As Long, ByVal nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
    Private Declare Function FillRect Lib "user32" (ByVal hdc As Long, lpRect As RECT, ByVal hBrush As Long) As Long
    Private Declare Function GetWindowDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
    Private Declare Function DrawText Lib "user32" Alias "DrawTextA" (ByVal hdc As Long, ByVal lpStr As String, ByVal nCount As Long, lpRect As RECT, ByVal wFormat As Long) As Long
    Private Declare Function GetSysColor Lib "user32" (ByVal nIndex As Long) As Long
    Private Declare Function GetSysColorBrush Lib "user32" (ByVal nIndex As Long) As Long
    Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As Long
    Private Declare Function GetTextExtentPoint32 Lib "gdi32" Alias "GetTextExtentPoint32A" (ByVal hdc As Long, ByVal lpsz As String, ByVal cbString As Long, lpSize As SIZE) As Long
    Private Declare Function GetDC Lib "user32" (ByVal hWnd As Long) As Long
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Declare Function GetSystemMetrics Lib "user32" (ByVal nIndex As Long) As Long