Api 图标在弹出菜单VB6中消失
将主(第一个)弹出菜单项Visible属性设置为False后,图标在弹出菜单中消失,但当Visible属性切换回Enable时,图标又会出现,为什么Api 图标在弹出菜单VB6中消失,api,menu,vb6,popup,icons,Api,Menu,Vb6,Popup,Icons,将主(第一个)弹出菜单项Visible属性设置为False后,图标在弹出菜单中消失,但当Visible属性切换回Enable时,图标又会出现,为什么 Option Explicit Private Const MF_BITMAP = &H4& Private Const MF_BYPOSITION As Long = &H400& '&H404& Private Declare Function GetMenu Lib "user32" (B
Option Explicit
Private Const MF_BITMAP = &H4&
Private Const MF_BYPOSITION As Long = &H400& '&H404&
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 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 Sub SetPopUpMenuIcons(objFRM As Form)
On Error Resume Next
Dim lgRet As Long
Dim lgMnu As Long
Dim lgSubMnu As Long
lgMnu = GetMenu(objFRM.hwnd)
lgSubMnu = GetSubMenu(lgMnu, 0)
With objFRM
lgRet = SetMenuItemBitmaps(lgSubMnu, 0, MF_BYPOSITION, .imgMnu(0).Picture, 0)
lgRet = SetMenuItemBitmaps(lgSubMnu, 1, MF_BYPOSITION, .imgMnu(1).Picture, 0)
lgRet = SetMenuItemBitmaps(lgSubMnu, 2, MF_BYPOSITION, .imgMnu(2).Picture, 0)
lgRet = SetMenuItemBitmaps(lgSubMnu, 3, MF_BYPOSITION, .imgMnu(3).Picture, 0)
lgRet = SetMenuItemBitmaps(lgSubMnu, 4, MF_BYPOSITION, .imgMnu(4).Picture, 0)
End With
Exit Sub
End Sub
我相信VB6 PopupMenu方法实际上创建了一个新的弹出菜单(通过调用CreatePopupMenu),然后使用隐藏的菜单项作为模板,通过InsertMenu或AppendMenu创建项目,但不使用位图标志和句柄,因为它不知道您在后面添加了这些标记和句柄 您可能需要自己完成所有工作,调用CreatePopupMenu,然后为每个项调用InsertMenuItem,而不是InsertMenuItem/AppendMenu(以便同时具有位图和文本),并使用子类化获取选择“事件”(如果有),依此类推 换言之,做你想做的事情可能没有琐碎的方法。VB6菜单管道似乎基于旧的16位Windows(Win3.x)逻辑和API调用 可惜我们没有真正的VB7!微软在推出.Net之前,已经积累了大量此类功能增强 可能有一个第三方菜单控件,可以使这更容易