如何创建含有位图的菜单项 很急 就是在在菜单项中加入位图图形 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 创建位图菜单其实非常简单,可以使用API函数SetMenuItemBitmaps来为菜单项添加位图。调用该函数时需要用到弹出菜单的句柄,以及要添加的位图。 弹出菜单的句柄可以使用API函数GetMenu与GetSubMenu来获得。位图则可以通过在窗体上放置图像框控件来提供。Option ExplicitPrivate Declare Function GetMenu Lib "user32" _ (ByVal hwnd As Long) As LongPrivate Declare Function GetSubMenu Lib "user32" _ (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate 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 LongConst MF_BYPOSITION = &H400&Private Sub Form_Load() Dim mHandle As Long, lRet As Long, sHandle As Long, sHandle1 As Long '获得菜单的句柄 mHandle = GetMenu(hwnd) '获得“文件”菜单的句柄 sHandle = GetSubMenu(mHandle, 0) '为“打开”菜单项添加位图 lRet = SetMenuItemBitmaps _ (sHandle, 0, MF_BYPOSITION, imOpen.Picture.Handle, imOpen.Picture.Handle) '为“保存”菜单项添加位图 lRet = SetMenuItemBitmaps _ (sHandle, 1, MF_BYPOSITION, imSave.Picture, imSave.Picture) '为“打印”菜单项添加位图 lRet = SetMenuItemBitmaps _ (sHandle, 3, MF_BYPOSITION, imPrint.Picture, imPrint.Picture) '获得“其他”菜单的句柄 sHandle = GetSubMenu(mHandle, 1) '获得“帮助”子菜单的句柄 sHandle1 = GetSubMenu(sHandle, 0) '为“内容”菜单项添加位图 lRet = SetMenuItemBitmaps _ (sHandle1, 0, MF_BYPOSITION, imContent.Picture, imContent.Picture)End Sub欢迎光临电脑爱好者论坛 bbs.cfanclub.net LoveBH(IT狗狗) 的方法只能添加16色13*13像素的图标,这样添加的图标效果不是很好,而且13*13的图标也很难找。大多数据应用程序用的是自绘菜单。http://go6.163.com/910grtd/vb/wdzp/DrawMenu-S.htm上面是API版主zyl910的自绘菜单代码。如果用DELHPI就不用那么麻烦了。 一、设计思路 在通常的程序中,菜单项总以文本方式显示,非常单调乏味。如果能够在菜单项中加入位图,则能极大地美化程序的用户界面。但VB初学者一般都对此心存畏惧。其实,在菜单项中加入位图非常简单,可以使用函数SetMenuItemBitmaps来为菜单项添加位图。调用该函数时需要用到弹出菜单的句柄,以及要添加的位图,弹出菜单的句柄可以使用API函数GetMenu与GetSubMenu来获得,位图则可以通过在窗体上放置图像框控件来提供。 二、编程实例 新建一个EXE工程,为窗体设计出菜单,并在窗体上放置4个图像框控件,名称分别为:imopen、 imsave、imprint、imcontent,并在其中载入要显示在菜单项中的位图打开代码编辑器,输入以下代码:Option Explicit'声明Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate 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 LongConst MF_BYPOSITION = &H400&'加载窗体Private Sub Form_Load()'隐藏4个图像框控件imopen.Visible = Falseimsave.Visible = Falseimprint.Visible = Falseimcontent.Visible = FalseDim mHandle As Long, lRet As Long, sHandle As Long, sHandle1 As Long'获得菜单的句柄mHandle = GetMenu(hwnd)'获得“文件”菜单的句柄sHandle = GetSubMenu(mHandle, 0)'为“打开”菜单项添加位图lRet = SetMenuItemBitmaps _(sHandle, 0, MF_BYPOSITION, imopen.Picture.Handle, imopen.Picture.Handle)'为“保存”菜单项添加位图lRet = SetMenuItemBitmaps _(sHandle, 1, MF_BYPOSITION, imsave.Picture, imsave.Picture)'为“打印”菜单项添加位图lRet = SetMenuItemBitmaps _(sHandle, 3, MF_BYPOSITION, imprint.Picture, imprint.Picture)'获得“其他”菜单的句柄sHandle = GetSubMenu(mHandle, 1)'获得“帮助”子菜单的句柄sHandle1 = GetSubMenu(sHandle, 0)'为“内容”菜单项添加位图lRet = SetMenuItemBitmaps _(sHandle1, 0, MF_BYPOSITION, imContent.Picture, imContent.Picture)End Sub 现在按F5看看,效果怎么样? 三、总结 GetMenu函数的功能是获得窗体菜单的句柄。它的返回值即为菜单的句柄,如果窗体没有菜单,则返回NULL。其中参数hWnd用来指定具有菜单的窗口的句柄。GetSubMenu函数的功能是获得弹出菜单的句柄。它的返回值即为菜单的句柄,如出错,则返回NULL。其中各参数的含义如下: .hMenu:用来指定弹出菜单的父菜单的句柄。 .nPos:用来指定弹出菜单在主菜单的位置。值为0时为第一个,值为1时为第二个,依次类推。 SetMenuItemBitMaps函数的功能是以用户位图来取代缺省菜单检取标志位图。其中各参数的含义如下: .hMenu:用来指定菜单句柄。 .nPosition:指定要改变的菜单项号。 第一项,值为1时为第二项,依此类推。 .hBitmapUnchecked:用来指定当菜单项非检取时要显示的位图位图句柄。 .hBitmapChecked:用来指定当菜单项检取时要显示的位图句柄。 通过此例,我们可以看出,使用API函数的关键在于要弄清楚API函数的功能以及它的各个参数的含义,这既是API函数的难点,也是VB初学者的重点。 通过看以上的代码。这就是决定我为什么选择DELPHI的原故!这在DELPHI里面真的太容易了。!!! http://www.ourfly.com/download/downloadlist.aspx?type=VB 非常精彩的位图菜单(仿Word2000菜单) 可以访问www.vbgood.comwww.dapha.netwww.21code.comwww.vbeden.comwww.myvc.netmsdn.microsoft.comhttp://www.vbaccelerator.com/http://www.mvps.org/vbnet/http://www.freevbcode.com/http://www.pscode.com/vb/http://www.allapi.net和MSDN得到更多的帮助............. XP菜单http://www.dapha.net/down/list.asp?id=1863XP下拉菜单(影子效果,酷!!!)http://www.dapha.net/down/list.asp?id=426 告诉我你的邮箱,我有原程序给你!我的 是:[email protected] 求救了,各位大哥。帮顶呀!!! 求助:MSComm 的基础问题 API 纯代码实现 Winsock 控件 汉字传递怎样解决? 在进行list的removeitems事件是出错 这个方法怎么改造? 水晶报表那里有 高分求解答,报表问题。 今天第一次加入到这个大家庭,我觉得这里很温馨,还请大家多多关照。我有个有关报表制作的问题,希望大家能帮帮忙 数制转换 怎样在vb中测试打印端口是否准备好? 不满CSDN对于没有解决问题的帖子要扣除信誉分,所以散去11000多分,从此不再入CSDN论坛一步。(继续散分) 怎样添加到启动中!!!!
Private Declare Function GetMenu Lib "user32" _
(ByVal hwnd As Long) As LongPrivate Declare Function GetSubMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate 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 LongConst MF_BYPOSITION = &H400&Private Sub Form_Load()
Dim mHandle As Long, lRet As Long, sHandle As Long, sHandle1 As Long
'获得菜单的句柄
mHandle = GetMenu(hwnd)
'获得“文件”菜单的句柄
sHandle = GetSubMenu(mHandle, 0)
'为“打开”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle, 0, MF_BYPOSITION, imOpen.Picture.Handle, imOpen.Picture.Handle)
'为“保存”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle, 1, MF_BYPOSITION, imSave.Picture, imSave.Picture)
'为“打印”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle, 3, MF_BYPOSITION, imPrint.Picture, imPrint.Picture)
'获得“其他”菜单的句柄
sHandle = GetSubMenu(mHandle, 1)
'获得“帮助”子菜单的句柄
sHandle1 = GetSubMenu(sHandle, 0)
'为“内容”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle1, 0, MF_BYPOSITION, imContent.Picture, imContent.Picture)
End Sub
欢迎光临电脑爱好者论坛 bbs.cfanclub.net
http://go6.163.com/910grtd/vb/wdzp/DrawMenu-S.htm
上面是API版主zyl910的自绘菜单代码。如果用DELHPI就不用那么麻烦了。
新建一个EXE工程,为窗体设计出菜单,并在窗体上放置4个图像框控件,名称分别为:imopen、 imsave、imprint、imcontent,并在其中载入要显示在菜单项中的位图打开代码编辑器,输入以下代码:Option Explicit
'声明
Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As LongPrivate Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As LongPrivate 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 LongConst MF_BYPOSITION = &H400&'加载窗体
Private Sub Form_Load()
'隐藏4个图像框控件
imopen.Visible = False
imsave.Visible = False
imprint.Visible = False
imcontent.Visible = False
Dim mHandle As Long, lRet As Long, sHandle As Long, sHandle1 As Long
'获得菜单的句柄
mHandle = GetMenu(hwnd)
'获得“文件”菜单的句柄
sHandle = GetSubMenu(mHandle, 0)
'为“打开”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle, 0, MF_BYPOSITION, imopen.Picture.Handle, imopen.Picture.Handle)
'为“保存”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle, 1, MF_BYPOSITION, imsave.Picture, imsave.Picture)
'为“打印”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle, 3, MF_BYPOSITION, imprint.Picture, imprint.Picture)
'获得“其他”菜单的句柄
sHandle = GetSubMenu(mHandle, 1)
'获得“帮助”子菜单的句柄
sHandle1 = GetSubMenu(sHandle, 0)
'为“内容”菜单项添加位图
lRet = SetMenuItemBitmaps _
(sHandle1, 0, MF_BYPOSITION, imContent.Picture, imContent.Picture)
End Sub 现在按F5看看,效果怎么样? 三、总结 GetMenu函数的功能是获得窗体菜单的句柄。它的返回值即为菜单的句柄,如果窗体没有菜单,则返回NULL。其中参数hWnd用来指定具有菜单的窗口的句柄。
GetSubMenu函数的功能是获得弹出菜单的句柄。它的返回值即为菜单的句柄,如出错,则返回NULL。其中各参数的含义如下:
.hMenu:用来指定弹出菜单的父菜单的句柄。
.nPos:用来指定弹出菜单在主菜单的位置。值为0时为第一个,值为1时为第二个,依次类推。
SetMenuItemBitMaps函数的功能是以用户位图来取代缺省菜单检取标志位图。其中各参数的含义如下:
.hMenu:用来指定菜单句柄。
.nPosition:指定要改变的菜单项号。
第一项,值为1时为第二项,依此类推。
.hBitmapUnchecked:用来指定当菜单项非检取时要显示的位图位图句柄。
.hBitmapChecked:用来指定当菜单项检取时要显示的位图句柄。 通过此例,我们可以看出,使用API函数的关键在于要弄清楚API函数的功能以及它的各个参数的含义,这既是API函数的难点,也是VB初学者的重点。
非常精彩的位图菜单(仿Word2000菜单)
www.dapha.net
www.21code.com
www.vbeden.com
www.myvc.net
msdn.microsoft.com
http://www.vbaccelerator.com/
http://www.mvps.org/vbnet/
http://www.freevbcode.com/
http://www.pscode.com/vb/
http://www.allapi.net
和MSDN得到更多的帮助.............
http://www.dapha.net/down/list.asp?id=1863
XP下拉菜单(影子效果,酷!!!)
http://www.dapha.net/down/list.asp?id=426