| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3324 人关注过本帖, 1 人收藏
标题:给 VB 窗体上鼠标右键菜单添加图标
只看楼主 加入收藏
opelwang
Rank: 1
等 级:新手上路
帖 子:78
专家分:3
注 册:2009-7-2
结帖率:77.78%
收藏(1)
已结贴  问题点数:20 回复次数:11 
给 VB 窗体上鼠标右键菜单添加图标
如题,给VB窗体上鼠标右键菜单上添加菜单图标,应该如何操作,请指点,谢谢。
如图:
图片附件: 游客没有浏览图片的权限,请 登录注册
搜索更多相关主题的帖子: 如何 
2014-06-28 11:52
opelwang
Rank: 1
等 级:新手上路
帖 子:78
专家分:3
注 册:2009-7-2
收藏
得分:0 
如果一定需要源码,请跟贴回复,我再上传,谢谢。

窗体上已经添加三组菜单,共15个按钮。

如下图所示:
图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


.
2014-06-28 11:53
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
你这是 吧?
2014-06-28 14:32
opelwang
Rank: 1
等 级:新手上路
帖 子:78
专家分:3
注 册:2009-7-2
收藏
得分:0 
回复 3 楼 bczgvip
版主,这是VB6.0下实现的。
2014-06-28 14:35
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
        SetMenuItemBitmaps
        ImageList
        PopupMenu

自己找找吧。
2014-06-28 16:34
opelwang
Rank: 1
等 级:新手上路
帖 子:78
专家分:3
注 册:2009-7-2
收藏
得分:0 
回复 5 楼 bczgvip
代码如下,请版主指点一下,谢谢。

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
Const MF_BYPOSITION = &H400&


Private Sub Form_Load()

    ' --- 自定义图标-开始
    Dim mHandle As Long, lRet As Long, sHandle As Long, sHandle2 As Long
    ' 取得菜单的句柄并赋值给mHandle
    mHandle = GetMenu(hwnd)
    ' 取得mHandle句柄所指菜单的第一个出式菜单的句柄并赋值给sHandle
    sHandle = GetSubMenu(mHandle, 0)
    ' 将弹出式菜单的第一个弹出式菜单(0/2/4/6/8)加上图片, 跳过1/3/5/7, 因为是分隔线
    lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, Image1.Picture, Image1.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 2, MF_BYPOSITION, Image2.Picture, Image2.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 4, MF_BYPOSITION, Image3.Picture, Image3.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 6, MF_BYPOSITION, Image4.Picture, Image4.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 8, MF_BYPOSITION, Image5.Picture, Image5.Picture)

    ' 取得mHandle句柄所指菜单的第二个弹出式菜单的句柄并赋值给sHandle
    sHandle = GetSubMenu(mHandle, 1)
    lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, ImageA.Picture, ImageA.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 2, MF_BYPOSITION, ImageB.Picture, ImageB.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 4, MF_BYPOSITION, ImageC.Picture, ImageC.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 6, MF_BYPOSITION, ImageD.Picture, ImageD.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 8, MF_BYPOSITION, ImageE.Picture, ImageE.Picture)

    ' 取得mHandle句柄所指菜单的第三个弹出式菜单的句柄并赋值给sHandle
    sHandle = GetSubMenu(mHandle, 2)
    lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, Pic1.Picture, Pic1.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 2, MF_BYPOSITION, Pic2.Picture, Pic2.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 4, MF_BYPOSITION, Pic3.Picture, Pic3.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 6, MF_BYPOSITION, Pic4.Picture, Pic4.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 8, MF_BYPOSITION, Pic5.Picture, Pic5.Picture)


    sHandle = GetSubMenu(mHandle, 3) '以下两个是定义托盘的两个按钮图标---未起作用
    lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, Pic1.Picture, Pic1.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 2, MF_BYPOSITION, Pic2.Picture, Pic2.Picture)



    sHandle = GetSubMenu(mHandle, 4) '以下两个是定义窗体鼠标右键的三个按钮图标---未起作用
    lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, Pic1.Picture, Pic1.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 2, MF_BYPOSITION, Pic2.Picture, Pic2.Picture)
    lRet = SetMenuItemBitmaps(sHandle, 4, MF_BYPOSITION, Pic3.Picture, Pic3.Picture)

   

    ' --- 自定义图标-结束


End Sub

[ 本帖最后由 opelwang 于 2014-6-28 23:18 编辑 ]
2014-06-28 23:13
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:0 
呃,还真没遇到这问题。
难道还要咱试试么?Orz
好吧试试吧。

    sHandle = GetSubMenu(mHandle, 3) '以下两个是定义托盘的两个按钮图标---未起作用
    debug.assert shandle '要显示菜单才能更改么?又或者说要显示才列入 SubMenu 。
'咱只知道重绘菜单或代码创建菜单这两方法可以解决。
2014-06-29 15:34
opelwang
Rank: 1
等 级:新手上路
帖 子:78
专家分:3
注 册:2009-7-2
收藏
得分:0 
以下是引用bczgvip在2014-6-29 15:34:13的发言:

呃,还真没遇到这问题。
难道还要咱试试么?Orz
好吧试试吧。

    sHandle = GetSubMenu(mHandle, 3) '以下两个是定义托盘的两个按钮图标---未起作用
    debug.assert shandle '要显示菜单才能更改么?又或者说要显示才列入 SubMenu 。
'咱只知道重绘菜单或代码创建菜单这两方法可以解决。


因为窗体鼠标右键上的菜单,在菜单编辑器中是隐藏的,获取不到句柄。
如果有办法获取到隐藏菜单的句柄,也好办了。
2014-06-29 16:32
bczgvip
Rank: 14Rank: 14Rank: 14Rank: 14
等 级:贵宾
威 望:66
帖 子:1310
专家分:5312
注 册:2009-2-26
收藏
得分:20 
以前见过别人用过这办法,咱这代码整洁强迫症眼里挺囧的。就代码量与效率而言还不错了。

vb菜单问题2.zip (51.47 KB)
2014-06-30 02:26
opelwang
Rank: 1
等 级:新手上路
帖 子:78
专家分:3
注 册:2009-7-2
收藏
得分:0 
以下是引用bczgvip在2014-6-30 02:26:50的发言:

以前见过别人用过这办法,咱这代码整洁强迫症眼里挺囧的。就代码量与效率而言还不错了。


这是将隐藏的菜单项取消了来操作。

我的那个,如何取消隐藏也可以的,关键是就是获取不到隐藏菜单的句柄。
2014-06-30 16:51
快速回复:给 VB 窗体上鼠标右键菜单添加图标
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016670 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved