| VB 源码 | VC 源码 | ASP源码 | JSP源码 | PHP源码 | CGI源码 | FLASH源码 | 素材模板 | C 源程序 | 站长工具 | 站长教程 |

VB技术

ASP技术
PHP技术
JSP技术
VB技术
.NET技术

本类阅读TOP10

·VB到底为我们做了什么?
·利用shell编程实现DOS风格的Linux命令行
·屏保程序模板化完整源代码
·用VB6实现中英文文本的私钥加密
·VB解决Unicode文本转换的问题
·用VB编写网络监控软件
·一组VB实用小程序
·新手必学:windows网络编程经典入门
·用VB编写定时关闭计算机的程序
·用VB制作屏幕保护程序

站内搜索

用VB编写一个弹出菜单类

  '类的名称为cPopupMenu

  Option Explicit
  '
  Private Type POINT
    x As Long
    y As Long
  End Type
  '
  Private Const MF_ENABLED = &H0&
  Private Const MF_SEPARATOR = &H800&
  Private Const MF_STRING = &H0&
  Private Const TPM_RIGHTBUTTON = &H2&
  Private Const TPM_LEFTALIGN = &H0&
  Private Const TPM_NONOTIFY = &H80&
  Private Const TPM_RETURNCMD = &H100&
  Private Declare Function CreatePopupMenu Lib "user32" () As Long
  Private Declare Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal sCaption As String) 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, nIgnored As Long) As Long
  Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
  Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINT) As Long
  Private Declare Function GetForegroundWindow Lib "user32" () As Long
  Private 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
  Private mSelMenuString As String
  Public Property Get SelMenuString() As String
    SelMenuString = mSelMenuString
  End Property
  '
  Public Function Popup(ParamArray param()) As Long
    Dim iMenu As Long
    Dim hMenu As Long
    Dim nMenus As Long
    Dim p As POINT

  ' get the current cursor pos in screen coordinates
    GetCursorPos p

  ' create an empty popup menu
    hMenu = CreatePopupMenu()

  ' determine # of strings in paramarray
    nMenus = 1 + UBound(param)

  ' put each string in the menu
    For iMenu = 1 To nMenus
  ' the AppendMenu function has been superseeded by the InsertMenuItem
  ' function, but it is a bit easier to use.
      If Trim$(CStr(param(iMenu - 1))) = "-" Then
  ' if the parameter is a single dash, a separator is drawn
        AppendMenu hMenu, MF_SEPARATOR, iMenu, ""
      Else
        AppendMenu hMenu, MF_STRING + MF_ENABLED, iMenu, CStr(param(iMenu - 1))
      End If
    Next iMenu

  ' show the menu at the current cursor location;
  ' the flags make the menu aligned to the right (!); enable the right button to select
  ' an item; prohibit the menu from sending messages and make it return the index of
  ' the selected item.
  ' the TrackPopupMenu function returns when the user selected a menu item or cancelled
  ' the window handle used here may be any window handle from your application
  ' the return value is the (1-based) index of the menu item or 0 in case of cancelling
    iMenu = TrackPopupMenu(hMenu, TPM_RIGHTBUTTON + TPM_LEFTALIGN + TPM_NONOTIFY + TPM_RETURNCMD, p.x, p.y, 0, GetForegroundWindow(), 0)
    Dim result As Long
    Dim buffer As String
    Const MF_BYPOSITION = &H400&

    buffer = Space(255)

    result = GetMenuString(hMenu, (iMenu - 1), buffer, _
            Len(buffer), MF_BYPOSITION)
    'Debug.Print buffer
    mSelMenuString = Trim(buffer)
  ' release and destroy the menu (for sanity)
    DestroyMenu hMenu

  ' return the selected menu item's index
    Popup = iMenu

  End Function

  '结束

  '以下是实例,在Form上添加一个ListBox控件

  Option Explicit

  Private Sub Form_Load()
    List1.AddItem "Right-Click here for a menu"
  End Sub

  Private Sub List1_MouseUp(Button As Integer, Shift As Integer, x As Single, y As Single)
    Dim oMenu As cPopupMenu
    Dim lMenuChosen As Long
  '
    If Button = vbRightButton Then
      Set oMenu = New cPopupMenu
  '
  ' Pass in the desired menu, use '-' for a separator
  '
      lMenuChosen = oMenu.Popup("Menu 1", "Menu 2", "Menu 3", _
          "-", "Menu 4")
  '
      Debug.Print lMenuChosen
      Debug.Print oMenu.SelMenuString
    End If

  '
  End Sub

  出处: 代码高手




相关文章
  • 21个实用PHP代码
  • 精通PHP的十大要点
  • VB解决Unicode文本转换的问题
  • 一个基于WEB的QQ程序
  • 使用xmlhttp查询域名是否被注的小程序
  • 用VB6实现中英文文本的私钥加密
  • 一组VB实用小程序
  • 用VB编写异步多线程下载程序
  • 屏保程序模板化完整源代码
  • VB中实现窗体自动隐藏
  • 用VB编写网络监控软件
  • VB到底为我们做了什么?
  • 键盘幽灵VB版
  • 用VB编写定时关闭计算机的程序
  • 用MCI命令做一个播放器
  • 使用VB在WIN2000下截获IP数据包
  • VB中字符串中文的问题
  • 用VB制作屏幕保护程序
  • VB枚举主机IP
  • 自己的IE——用VB制作浏览器
  • 相关软件

  • VBScript编辑器源码  
  • 字体观察器FontViewer源码  
  • 自动壁纸更换器源码[第二部分]  
  • 自动壁纸更换器源码[第一部分]  
  • WINDOWS 3.0终端程序的C源码  
  • 一个取得 CPU 信息的程序源码  
  • 广告窗口终结者源码  
  • 下载整个网站程序ssnag与源码  
  • CGI邮件程序源码  
  • ISAPI留言簿源码  

  • 下载首页关于我们广告服务联系方式常见问题隐私声明法律条款本站声明下载帮助发布软件站点地图谷歌卫星地图