如何用SetMenuItenInfo设置菜单的图标?

mjpclab 2003-07-22 11:55:16
如何用SetMenuItenInfo设置菜单的图标?我不希望使用setmenuitenBitmaps。
...全文
72 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjpclab 2003-07-24
  • 打赏
  • 举报
回复
谢了,我原来用Icon格式,怪不得显示不出来……
zyl910 2003-07-24
  • 打赏
  • 举报
回复
如何用SetMenuItenInfo设置菜单的图标?

===========================================

看起来是图标,可实际上呢
注意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
zyl910 2003-07-24
  • 打赏
  • 举报
回复
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 Type

Private Const MIIM_CHECKMARKS As Long = &H8

Private 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
tangjinn 2003-07-23
  • 打赏
  • 举报
回复
麻烦,要对菜单重画.我都研究了好几天 代码我到是有. 就是太多了. 用控件吧
mjpclab 2003-07-23
  • 打赏
  • 举报
回复
没有效果啊。是否可以给出MIIM_CHECKMARKS的值
和用byPosition做的函数(只要设置主菜单第一项的第一个子菜单的图片就可以了)
zyl910 2003-07-23
  • 打赏
  • 举报
回复
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)

1,485

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧