关于VB控件中使用MENU的问题。

sunearlier 2003-12-08 06:19:29
请教各位大侠了。。。。
调用winapi制作菜单控件,如何修改菜单的背景色,或者修改背景图片啊?
Public Declare Function createMenu Lib "user32" Alias "CreateMenu" () As Long
Public Declare Function SetMenu Lib "user32" (ByVal hwnd As Long, ByVal hmenu As Long) As Long
Public Declare Function InsertMenuItem Lib "user32" Alias "InsertMenuItemA" (ByVal hmenu As Long, ByVal un As Long, ByVal BOOL As Boolean, ByRef lpcMenuItemInfo As MENUITEMINFO) As Long

以下是部分代码:

Dim mii As MENUITEMINFO
With mii
'.hbmpChecked = "c:\\1.jpg"
.cbSize = Len(mii)
.fMask = MIIM_STATE Or MIIM_ID Or MIIM_TYPE
If bSubmenu Then
.fMask = .fMask Or MIIM_SUBMENU
.hsubmenu = hsubmenu
End If
.fType = MFT_STRING
.fState = MFS_ENABLED
.wID = id
.dwTypeData = label
.cch = Len(.dwTypeData)
End With

createMenuItem = mii
...全文
290 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
sunearlier 2003-12-09
  • 打赏
  • 举报
回复
这位大峡说的每错,可是这种方法是用来生成工具栏用的,不是修改文本菜单用的。
我的目的是如何实现修改文本菜单的底色,或者给他们加上背景图。
hcj2002 2003-12-08
  • 打赏
  • 举报
回复
在VB中创建位图菜单
 一、设计思路

 在通常的程序中,菜单项总以文本方式显示,非常单调乏味。如果能够在菜单项中加入位图,则能极大地美化程序的用户界面。但VB初学者一般都对此心存畏惧。其实,在菜单项中加入位图非常简单,可以使用函数SetMenuItemBitmaps来为菜单项添加位图。调用该函数时需要用到弹出菜单的句柄,以及要添加的位图,弹出菜单的句柄可以使用API函数GetMenu与GetSubMenu来获得,位图则可以通过在窗体上放置图像框控件来提供。

 二、编程实例
 
 新建一个EXE工程,为窗体设计出菜单(如图一),并在窗体上放置4个图像框控件,名称分别为:imopen、 imsave、imprint、imcontent,并在其中载入要显示在菜单项中的位图(如图一)。


      (图一)                  (图二)

打开代码编辑器,输入以下代码:

Option Explicit
'声明
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()
'隐藏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:用来指定当菜单项检取时要显示的位图句柄。

1,453

社区成员

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

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