2014-09-12 59 views
0

在将主(第一个)PopUp菜单项Visible属性设置为False后,图标在PopUp菜单中消失,但当Visible属性切换回Enable时,图标消失,为什么?图标在PopUp菜单中消失VB6

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 

回答

0

我认为,VB6的PopupMenu方法实际上创建了一个新的弹出式菜单(通过调用CreatePopupMenu),然后使用隐藏菜单项创建通过InsertMenu或AppendMenu项目模板,但没有使用位图标志和手柄它不知道你在它后面加了什么。

您可能必须自己完成所有工作,调用CreatePopupMenu然后InsertMenuItem代替InsertMenu/AppendMenu(为了同时具有位图和文本),并使用子类化来获得选择“事件”如果有的话,等等。

换句话说,可能没有无用的方法去做你想做的事。 VB6菜单管道似乎基于旧的16位Windows(Win 3.x)逻辑和API调用。

太糟糕了,我们从来没有真正的VB7!在推出支持.Net的插件之前,微软已经积累了大量此类功能增强功能。

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