Dim mii as MENUITEMINFO mii.cbSize=len(mii) mii.fMask=MIIM_CHECKMARKS mii.hbmpChecked=Image1.Picture.handle mii.hbmpUnchecked=Image2.Picture.handle Call SetMenuItenInfo(上层菜单句柄, 菜单ID, False, mii)
Private Declare Function GetMenu Lib "user32.dll" (ByVal hWnd As Long) As Long Private Declare Function GetSubMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long Private Declare Function SetMenuItemInfo Lib "user32.dll" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long Private Type MENUITEMINFO cbSize As Long fMask As Long fType As Long fState As Long wID As Long hSubMenu As Long hbmpChecked As Long hbmpUnchecked As Long dwItemData As Long dwTypeData As String cch As Long End TypePrivate Const MIIM_CHECKMARKS As Long = &H8Private Sub Form_Load() Dim hMenu As Long hMenu = GetMenu(Me.hWnd) hMenu = GetSubMenu(hMenu, 0)
Dim mii As MENUITEMINFO mii.cbSize = Len(mii) mii.fMask = MIIM_CHECKMARKS mii.hbmpChecked = Image1.Picture.Handle mii.hbmpUnchecked = Image1.Picture.Handle Debug.Print SetMenuItemInfo(hMenu, 0, True, mii)
mii.cbSize=len(mii)
mii.fMask=MIIM_CHECKMARKS
mii.hbmpChecked=Image1.Picture.handle
mii.hbmpUnchecked=Image2.Picture.handle
Call SetMenuItenInfo(上层菜单句柄, 菜单ID, False, mii)
和用byPosition做的函数(只要设置主菜单第一项的第一个子菜单的图片就可以了)
Private Declare Function GetSubMenu Lib "user32.dll" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function SetMenuItemInfo Lib "user32.dll" Alias "SetMenuItemInfoA" (ByVal hMenu As Long, ByVal un As Long, ByVal bool As Boolean, lpcMenuItemInfo As MENUITEMINFO) As Long
Private Type MENUITEMINFO
cbSize As Long
fMask As Long
fType As Long
fState As Long
wID As Long
hSubMenu As Long
hbmpChecked As Long
hbmpUnchecked As Long
dwItemData As Long
dwTypeData As String
cch As Long
End TypePrivate Const MIIM_CHECKMARKS As Long = &H8Private Sub Form_Load()
Dim hMenu As Long
hMenu = GetMenu(Me.hWnd)
hMenu = GetSubMenu(hMenu, 0)
Dim mii As MENUITEMINFO
mii.cbSize = Len(mii)
mii.fMask = MIIM_CHECKMARKS
mii.hbmpChecked = Image1.Picture.Handle
mii.hbmpUnchecked = Image1.Picture.Handle
Debug.Print SetMenuItemInfo(hMenu, 0, True, mii)
End Sub
注意mii.hbmpChecked、mii.hbmpUnchecked,看到hbmp没有,是位图(BMP文件)setmenuitenBitmaps设置的“图标”其实是位图(BMP),而且最好是 13*13的单色位图,因为Windows是使用And运算将位图与菜单背景合并的(这样白色的部分是透明的,只有黑色部分显示)要想实现完美的图形菜单效果,用自绘菜单技术(与三楼说的“菜单重画”是同一个东西,翻译不同而已)
可参考:http://www.applevb.com/sourcecode/ownerdrawmenu.zip
演示建立图形菜单,同一般的图形菜单不同,通过该程序建立的菜单当光标移动到菜单项上时,该项一样可以象Word97菜单项一样突出显示。 下载(10.5K) http://www.applevb.com/sourcecode/startupmenu.zip
该程序通过子分类(Sub Class)技术实现了显示象Windows开始菜单效果的菜单条。 下载(44.7K