2014-09-12 41 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的插件之前,微軟已經積累了大量此類功能增強功能。

可能有第三方菜單控件可以使這更容易。