用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 GetCursorPLib "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()
' detene # 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
' 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)
'De.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
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-988388/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 用VB編寫簡單的程式來清空文件選單 (轉)
- 用VB編寫抽獎程式 (轉)
- 偶用tput編的一個選擇式選單(轉)
- 用VB編寫標準CGI程式 (轉)
- 我第一個做好的彈出選單
- 一個用VB編寫的監控別人上網的軟體例子 (轉)
- 用VB編寫網路尋呼機(1) (轉)
- 用VB編寫網路尋呼機(2) (轉)
- 利用transform實現一個純CSS彈出選單ORMCSS
- 編寫了一個輔助Flutter彈出Toast的PackageFlutterASTPackage
- 一個js編寫全選、彈出對話方塊、ajax-json的案例JSON
- 用VB編寫COM+應用時碰到問題? (轉)
- 寫了一個簡單好用的彈出層外掛
- 用VB編寫OPC客戶端訪問WINCC (轉)客戶端
- C++Builder 高手進階 (一)編寫彈出廣告殺手 (轉)C++UI
- Flutter | 超實用簡單選單彈出框 PopupMenuButtonFlutter
- 左鍵彈出選單
- 一個簡單實用的 vb 加密/解密演算法 (轉)加密解密演算法
- 用C++編寫一個簡單的釋出者和訂閱者C++
- 用VB編寫非同步多執行緒下載程式 (轉)非同步執行緒
- 彈彈彈,彈走魚尾紋的彈出選單(vue)Vue
- 用Java編寫一個最簡單的桌面程式Java
- UITextView定製彈出選單UITextView
- QToolButton設定彈出選單QT
- 點選按鈕彈出一個居中div
- 利用VB編寫螢幕保護程式 (轉)
- 直播原始碼網站,點選分類調起選單欄並彈出原始碼網站
- 用 Go 編寫一個簡單的 WebSocket 推送服務GoWeb
- Delphi製作帶圖示的彈出式選單 (轉)
- javascript編寫一個簡單的編譯器JavaScript編譯
- 絕對精彩:在網頁裡做類似window右鍵的彈出式選單 (轉)網頁
- 用Junit Framework編寫單元測試 (轉)Framework
- ASP編寫完整的一個IP所在地搜尋類 (轉)
- Win32彙編教程四 編寫一個簡單的視窗 (轉)Win32
- 用 C 語言編寫一個簡單的垃圾回收器
- 製作可以自動隱藏的彈出式選單 (轉)
- 編寫一個非常簡單的 JavaScript 編輯器JavaScript
- MFC彈出選單隱藏解決