用API函数CreatePopupMenu建的右键菜单为什么在VB里可以,在VBA中是灰的?

zlt2006 2018-10-12 01:13:15
用API函数CreatePopupMenu建的右键菜单为什么在VB里可以,在VBA中是灰的?



Option Explicit

#If Win64 Then
Private Declare PtrSafe Function AppendMenu Lib "user32" Alias "AppendMenuA" (ByVal hMenu As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpNewItem As Any) As Long
Private Declare PtrSafe Function CreatePopupMenu Lib "user32" () As Long
Private Declare PtrSafe 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 Long
Private Declare PtrSafe Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare PtrSafe Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare PtrSafe Function GetFocus Lib "user32" () As Long
#Else
Private 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
Private Declare Function CreatePopupMenu Lib "user32" () 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 Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Declare Function DestroyMenu Lib "user32" (ByVal hMenu As Long) As Long
Private Declare Function GetFocus Lib "user32" () As Long
#End If


Dim hMenu As Long

Private Const TPM_RETURNCMD = &H100
Private Type POINTAPI
X As Long
Y As Long
End Type


Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
Dim Hwnd As Long
Dim Pt As POINTAPI, ID As Long
Hwnd = GetFocus()
GetCursorPos Pt
If Button = 2 Then
ID = TrackPopupMenu(hMenu, TPM_RETURNCMD, Pt.X, Pt.Y, 0, Hwnd, ByVal 0&)
PopMenuEvent ID
End If
End Sub

Private Sub UserForm_Initialize()
hMenu = CreatePopupMenu()
AppendMenu hMenu, &H0&, ByVal 1&, "菜单1"
AppendMenu hMenu, &H0&, ByVal 2&, "菜单2"
AppendMenu hMenu, &H0&, ByVal 3&, "菜单3"
End Sub

Private Sub PopMenuEvent(ID As Long)
Select Case ID
Case 1
MsgBox "事件1"
Case 2
MsgBox "事件2"
Case 3
MsgBox "事件3"
Case Else
End Select

End Sub

Private Sub UserForm_Terminate()
DestroyMenu hMenu
End Sub

...全文
466 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
舉杯邀明月 2018-10-12
  • 打赏
  • 举报
回复
还真有这事。


我用EnableMenuItem( )想把它改为“有效”,也没起到作用。

2,462

社区成员

发帖
与我相关
我的任务
社区描述
VBA(Visual Basic for Applications)是Visual Basic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。
社区管理员
  • VBA
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧