Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Api 图标在弹出菜单VB6中消失_Api_Menu_Vb6_Popup_Icons - Fatal编程技术网

Api 图标在弹出菜单VB6中消失

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

将主(第一个)弹出菜单项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" (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之前,已经积累了大量此类功能增强

可能有一个第三方菜单控件,可以使这更容易