请各位大虾帮帮我,如何在菜单编辑器中添加小图标????

Wilson 2003-08-21 06:40:34
请各位大虾帮帮我,如何在菜单编辑器中添加小图标???
用代码写可以吗???
谢谢帮忙!!!
...全文
646 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
lihonggen0 2003-08-25
  • 打赏
  • 举报
回复
http://www.dapha.net/down/list.asp?id=2045
http://www.dapha.net/down/list.asp?id=1988
lihonggen0 2003-08-25
  • 打赏
  • 举报
回复

XP下拉菜单(影子效果,酷!!!)
http://www.dapha.net/down/list.asp?id=426
chf99cn 2003-08-24
  • 打赏
  • 举报
回复
我有一个专门的控件,很好用的,不过没带过来,等下拿过来,不过你要给我多点分哦!
你的E-MAIL是什么?我发给你!
sworddx 2003-08-24
  • 打赏
  • 举报
回复
【VB声明】

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

【说明】
设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√)。位图的大小必须与菜单复选符号的正确大小相符,这个正确大小可以由GetMenuCheckMarkDimensions函数获得

【返回值】
Long,非零表示成功,零表示失败。会设置GetLastError

【备注】
使用的位图可能由多个条目共享。一旦不再需要,位图必须由应用程序清除,因为windows不能自动对它进行清除

【参数表】
  hMenu ---------- Long,菜单句柄

  nPosition ------ Long,欲设置位图的一个菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)

  wFlags --------- Long,常数MF_BYCOMMAND或MF_BYPOSITION,取决于nPosition参数

  hBitmapUnchecked - Long,撤消复选时为菜单条目显示的一幅位图的句柄。如果为零,表示不在未复选状态下显示任何标志

  hBitmapChecked - 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句柄所指菜单的第一个弹出式菜单(文件&F)的句柄并赋值给sHandle

sHandle = GetSubMenu(mHandle, 0)

  将弹出式菜单的第0-4项加上图片,为什么跳过2呢?因为2是分割线

lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, imOpen.Picture, imSave.Picture)
lRet = SetMenuItemBitmaps(sHandle, 1, MF_BYPOSITION, imSave.Picture, imSave.Picture)
lRet = SetMenuItemBitmaps(sHandle, 3, MF_BYPOSITION, imPrint.Picture, imPrint.Picture)
lRet = SetMenuItemBitmaps(sHandle, 4, MF_BYPOSITION, imPrintSetup.Picture, imPrintSetup.Picture)

  取得mHandle句柄所指菜单的第二个弹出式菜单(编辑&E)的句柄并赋值给sHandle

  sHandle = GetSubMenu(mHandle, 1)
  取得sHandle句柄所指菜单的第一个次级菜单(次级菜单&S)的句柄并赋值给sHandle2

  sHandle2 = GetSubMenu(sHandle, 0)
  将次级菜单中的第1项加上图片

  lRet = SetMenuItemBitmaps(sHandle2, 0, MF_BYPOSITION, imCopy.Picture, imCopy.Picture)
  提示:在SetMenuItemBitmaps()我们把后两项设为相同的图片,如果设为不同的两张图片会有什么效果呢?
  原来这两张图片分别表示复选和撤消复选时的状态,你只须在菜单项被点击的函数中加入以下语句:

Private Sub mnuOpen_Click()
If mnuOpen.Checked = True Then
mnuOpen.Checked = False
Else: mnuOpen.Checked = True
End If
End Sub

  然后在SetMenuItemBitmaps()我们把后两项设为不同的图片即可,有兴趣的话试一试。
  End Sub


sworddx 2003-08-24
  • 打赏
  • 举报
回复
为了学习方便,这里提供了全部源码并作了详细的中文注释:
-------------------------------------------------
让菜单中出现图标一法
-------------------------------------------------
程序应用三个API函数实现了在菜单项中加入小图标
GetMenu、GetSubMenu、SetMenuItemBitmaps
-------------------------------------------------
Option Explicit
【VB声明】

Private Declare Function GetMenu Lib "user32" (ByVal hwnd As Long) As Long

【说明】
取得窗口中一个菜单的句柄

【返回值】
Long,依附于指定窗口的一个菜单的句柄(如果有菜单);否则返回零

【参数表】
hwnd ----------- Long,窗口句柄。对于vb,这应该是一个窗体句柄。注意可能不是子窗口的句柄
Private Declare Function GetMenu Lib "user32" _
(ByVal hwnd As Long) As Long
-------------------------------------------------
【VB声明】

Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long

【说明】
取得一个弹出式菜单的句柄,它位于菜单中指定的位置

【返回值】
Long,位于指定位置的弹出式菜单的句柄(如果有的话);否则返回零

【参数表】
hMenu ---------- Long,菜单的句柄

nPos ----------- Long,条目在菜单中的位置。第一个条目的编号为0

Private Declare Function GetSubMenu Lib "user32" _
(ByVal hMenu As Long, ByVal nPos As Long) As Long
sworddx 2003-08-24
  • 打赏
  • 举报
回复
在菜单中加入图标

2001-11-24· · ··yesky


1 2 3 4 下一页

  VB菜单编辑器所提供的默认菜单是不能在菜单项中加入图标的,而许多流行的软件大都采用了漂亮的带有小图标的菜单,如果想利用VB实现这种效果就必须要调用API函数来实现了。例中我们使用了三个与菜单操作有关的函数:GetMenu、SetMenuItemBitmaps、GetSubMenu。
  我们先来声明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 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


  GetMenu函数的作用得到一个窗口中的菜单的句柄(这个菜单句柄应理解为处于某个窗体上的所有菜单的入口),其中各个参数的意义如下表所示:

参数 意义
  hwnd Long,窗口句柄。对于vb,这应该是一个窗体句柄
  返回值 Long,依附于指定窗口的一个菜单的句柄(如果有菜单);否则返回零

  GetSubMenu函数用于取得一个弹出式菜单(弹出式菜单是指处于任何一级的菜单,注意不是菜单项)的句柄,它位于菜单中指定的位置,它的各个参数的意义如下:

参数 意义
  hMenu Long,菜单的句柄
  nPos Long,次级菜单在上级菜单中的位置。第一个位置的编号为0
  返回值 Long,位于指定位置的弹出式菜单的句柄(如果有的话);否则返回零

  SetMenuItemBitmaps函数用于设置一幅特定位图,令其在指定的菜单条目中使用,代替标准的复选符号(√),它的各个参数的意义如下:

参数 意义
  hMenu Long,菜单的句柄
  nPosition Long,欲设置位图的一个菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)
  wFlags Long,常数MF_BYCOMMAND或MF_BYPOSITION,取决于nPosition参数
  hBitmapUnchecked Long,撤消复选时为菜单条目显示的一幅位图的句柄。如果为零,表示不在未复选状态下显示任何标志
  hBitmapChecked Long,复选时为菜单条目显示的一幅位图的句柄。可设为零,表示复选时不显示任何标志。如两个位图句柄的值都是零,则为这个条目恢复使用默认复选位图
返回值 Long,非零表示成功,零表示失败。

  下面我们看看怎样为菜单的指定项目加上图标,步骤一:取得菜单的句柄并赋值给mHandle,接着取得mHandle句柄所指菜单的第一个弹出式菜单的句柄并赋值给sHandle:

mHandle = GetMenu(form.hwnd)
sHandle = GetSubMenu(mHandle, 0)

  然后就为菜单项加入图标,这里我们把wFlags参数设为了MF_BYPOSITION,也就是说使用菜单项的位置(从序号0开始)来标示菜单项:

lRet = SetMenuItemBitmaps(sHandle, 0, MF_BYPOSITION, imOpen.Picture, imOpen.Picture)
lRet = SetMenuItemBitmaps(sHandle, 1, MF_BYPOSITION, imSave.Picture, imSave.Picture)

  以上是为菜单项添加图标的基本方法,例中还演示了怎样为次级菜单中的菜单项添加图标,以及菜单项处于复选/非复选状态时,对应图标发生变化的方法,具体的实现方法可以参照程序中的注释。




WQ771211 2003-08-24
  • 打赏
  • 举报
回复
要用API才行,去查“图形菜单”,多如牛毛
你想当“李逍遥”式的“大侠”吗? 这里无需计算机基础,无需编程经验,你也不必是计算机专业的在校大学生....只要爱好游戏,怀揣梦想! 有一定自主学习能力,跟着刘老师从“编程小白”修炼为游戏研发“大虾”吧!!!学习好Unity,其先决条件是一定要有稳固、扎实的编程基础!课程 《C# For Unity系列之入门篇》配套学习资料链接:http://pan.baidu.com/s/1gflxreN 密码:sou5;刘老师讲Unity学员群(2) 497429806一、热更新系列(技术含量:高级):A:《lua热更新技术级篇》https://edu.csdn.net/course/detail/27087B:《热更新框架设计之Xlua基础视频课程》https://edu.csdn.net/course/detail/27110C:《热更新框架设计之热更流程与热补丁技术》https://edu.csdn.net/course/detail/27118D:《热更新框架设计之客户端热更框架(上)》https://edu.csdn.net/course/detail/27132E:《热更新框架设计之客户端热更框架()》https://edu.csdn.net/course/detail/27135F:《热更新框架设计之客户端热更框架(下)》https://edu.csdn.net/course/detail/27136二:框架设计系列(技术含量:级): A:《游戏UI界面框架设计系列视频课程》https://edu.csdn.net/course/detail/27142B:《Unity客户端框架设计PureMVC篇视频课程(上)》https://edu.csdn.net/course/detail/27172C:《Unity客户端框架设计PureMVC篇视频课程(下)》https://edu.csdn.net/course/detail/27173D:《AssetBundle框架设计_框架篇视频课程》https://edu.csdn.net/course/detail/27169三、Unity脚本从入门到精通(技术含量:初级)A:《C# For Unity系列之入门篇》https://edu.csdn.net/course/detail/4560B:《C# For Unity系列之基础篇》https://edu.csdn.net/course/detail/4595C: 《C# For Unity系列之级篇》https://edu.csdn.net/course/detail/24422D:《C# For Unity系列之进阶篇》https://edu.csdn.net/course/detail/24465四、虚拟现实(VR)与增强现实(AR):(技术含量:初级)A:《虚拟现实之汽车仿真模拟系统 》https://edu.csdn.net/course/detail/26618五、Unity基础课程系列(技术含量:初级) A:《台球游戏与FlappyBirds—Unity快速入门系列视频课程(第1部)》 https://edu.csdn.net/course/detail/24643B:《太空射击与移动端发布技术-Unity快速入门系列视频课程(第2部)》https://edu.csdn.net/course/detail/24645 C:《Unity ECS(二) 小试牛刀》https://edu.csdn.net/course/detail/27096六、Unity ARPG课程(技术含量:初级):A:《MMOARPG地下守护神_单机版实战视频课程(上部)》https://edu.csdn.net/course/detail/24965B:《MMOARPG地下守护神_单机版实战视频课程(部)》https://edu.csdn.net/course/detail/24968C:《MMOARPG地下守护神_单机版实战视频课程(下部)》https://edu.csdn.net/course/detail/24979

1,216

社区成员

发帖
与我相关
我的任务
社区描述
VB 数据库(包含打印,安装,报表)
社区管理员
  • 数据库(包含打印,安装,报表)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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