用VB制作位图菜单
软件世界
我们知道,用VB的菜单编辑器制作的菜单只能是文字的,那么有没有办法制作位图菜单呢?回答是肯定的。其实我们可以利用API函数中的GetMenu及GetSubMenu函数获得程序中各个子菜单项的句柄,然后利用SetMenuItemBitmaps函数将位图追加到该子菜单项中去。现举例说明如下。
一、窗体设置
1.新建一工程,在Form1上添加4个Image控件,将Visable属性设为False,将Picture属性设为四张不同的位图。
2.打开“菜单编辑器”,分别建立“文件”和“帮助”两个菜单项,在“文件”菜单下分别添加“打开”和“退出”两个子菜单项,在“帮助”菜单下分别添加“帮助”和“关于”两个子菜单项。
二、程序代码
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
Private Const MF_BYPOSITION = &H400&
Private Sub Form_Load()
Dim hmenu As Long
Dim bmpmenu As Long
Me.Move (Screen.Width - Me.Width)/ 2, (Screen.Height - Me.Height)/ 2 '使窗体居中
hmenu = GetMenu(Me.hwnd) '取得主菜单的句柄
hmenu = GetSubMenu(hmenu, 0) '取得主菜单中“文件”菜单项的句柄
bmpmenu = SetMenuItemBitmaps(hmenu, 0, MF_BYPOSITION, Image1, Image1) '将Image1中的位图加到“打开”子菜单项中去
bmpmenu = SetMenuItemBitmaps(hmenu, 1, MF_BYPOSITION, Image2, Image2) '将Image2中的位图加到“退出”子菜单项中去
hmenu = GetMenu(Me.hwnd)
hmenu = GetSubMenu(hmenu, 1)
bmpmenu = SetMenuItemBitmaps(hmenu, 0, MF_BYPOSITION, Image3, Image1)
bmpmenu = SetMenuItemBitmaps(hmenu, 1, MF_BYPOSITION, Image4, Image1)
End Sub