设为首页收藏本站

SKY外语、计算机论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 4331|回复: 5
打印 上一主题 下一主题

vb 利用API为系统菜单添加图标

[复制链接]

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
跳转到指定楼层
楼主
发表于 2013-11-11 12:33:44 |只看该作者 |倒序浏览
为保证读者顺利上机实践,请遵照下面的每一个步骤
(1)建立一个菜单(如果不清楚菜单编辑器的使用,请百度),层次结构如下图:
(2)添加一个IimageList控件,并添加至少四张图片(不会添加的请百度,此处不赘述),效果如图2
(3)引用API函数。并定义用到的常量
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 GetMenuItemID 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
Const MF_bitmap = &H4&

(4)添加Form_Load事件代码
Private Sub Form_Load()
'为“进货管理”菜单下的子菜单添加图标
  Dim i As Integer
  Dim menu1 As Long
  Dim menuID As Long
  menu1 = GetMenu(Me.hwnd)
  For i = 1 To 4
    menuID = GetMenuItemID(GetSubMenu(menu1, 0), i - 1)
    SetMenuItemBitmaps menu1, menuID, MF_bitmap, ImageList2.ListImages(i).Picture, ImageList2.ListImages(i).Picture
  Next
End Sub
分享到: QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
分享淘帖0 收藏收藏0 评分评分

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
沙发
发表于 2013-11-11 12:35:11 |只看该作者
下面是关于API的详细介绍
GetMenu

VB声明
Declare Function GetMenu Lib "user32" Alias "GetMenu" (ByVal hwnd As Long) As Long
说明
取得窗口中一个菜单的句柄
返回值
Long,依附于指定窗口的一个菜单的句柄(如果有菜单);否则返回零
参数表
参数 类型及说明
hwnd Long,窗口句柄。对于vb,这应该是一个窗体句柄。注意可能不是子窗口的句柄
回复

使用道具 评分 举报

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
板凳
发表于 2013-11-11 12:35:51 |只看该作者
GetSubMenu

VB声明
Declare Function GetSubMenu Lib "user32" Alias "GetSubMenu" (ByVal hMenu As Long, ByVal nPos As Long) As Long
说明
取得一个弹出式菜单的句柄,它位于菜单中指定的位置
返回值
Long,位于指定位置的弹出式菜单的句柄(如果有的话);否则返回零
参数表
参数 类型及说明
hMenu Long,菜单的句柄
nPos Long,条目在菜单中的位置。第一个条目的编号为0
回复

使用道具 评分 举报

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
地板
发表于 2013-11-11 12:36:42 |只看该作者
GetMenuItemID

VB声明
Declare Function GetMenuItemID Lib "user32" Alias "GetMenuItemID" (ByVal hMenu As Long, ByVal nPos As Long) As Long
说明
返回位于菜单中指定位置处的条目的菜单ID
返回值
Long,指定条目的菜单ID。如条目属于一个弹出式菜单,就返回-1;如指定的条目属于一个分隔符(比如一条分隔线)则返回0
参数表
参数 类型及说明
hMenu Long,菜单的句柄
nPos Long,条目在菜单中的位置。第一个条目的编号是0
回复

使用道具 评分 举报

9

主题

0

好友

104

积分

版主

Rank: 7Rank: 7Rank: 7

生肖
星座
狮子座
性别
5#
发表于 2013-11-11 12:37:17 |只看该作者
SetMenuItemBitmaps

VB声明
Declare Function SetMenuItemBitmaps Lib "user32" Alias "SetMenuItemBitmaps" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal hBitmapUnchecked As Long, ByVal hBitmapChecked As Long) As Long
说明
设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)。位图的大小必须与菜单复选符号的正确大小相符,这个正确大小可以由GetMenuCheckMarkDimensions函数获得
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hMenu Long,菜单句柄
nPosition Long,欲设置位图的一个菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)
wFlags Long,常数MF_BYCOMMAND或MF_BYPOSITION,取决于nPosition参数
hBitmapUnchecked Long,撤消复选时为菜单条目显示的一幅位图的句柄。如果为零,表示不在未复选状态下显示任何标志
hBitmapChecked Long,复选时为菜单条目显示的一幅位图的句柄。可设为零,表示复选时不显示任何标志。如两个位图句柄的值都是零,则为这个条目恢复使用默认复选位图
注解
使用的位图可能由多个条目共享。一旦不再需要,位图必须由应用程序清除,因为windows不能自动对它进行清除


回复

使用道具 评分 举报

0

主题

0

好友

16

积分

新手上路

Rank: 1

生肖
星座
双子座
性别
6#
发表于 2014-2-25 13:11:32 |只看该作者
感谢分享
回复

使用道具 评分 举报

您需要登录后才可以回帖 登录 | 立即注册


手机版|SKY外语计算机学习 ( 粤ICP备12031577 )    

GMT+8, 2024-12-22 09:47 , Processed in 0.170661 second(s), 33 queries .

回顶部