位图菜单...

softwaredream 2002-11-06 08:21:35
我知道在VB里制作位图菜单是要用API,但具体怎么做不太清楚,所以向前辈门请教,很急!先在这里谢过。
...全文
21 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
softwaredream 2002-11-10
  • 打赏
  • 举报
回复
to zyl910:
真是很抱歉,我下载你的文件(http://zyl910vb.51.net/vb/gui/DrawMenu-S.htm),按照你的步骤把它“目标另存为”可是下载下来的还是JPEG文件,怎么回事?
softwaredream 2002-11-10
  • 打赏
  • 举报
回复
Private Declare Function GetMenu Lib "user32" (ByVal hWnd As Long) As Long
Private Declare Function GetMenuItemID Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function GetSubMenu Lib "user32" (ByVal hMenu As Long, ByVal nPos As Long) As Long
Private Declare Function ModifyMenu Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Any) As Long
Const MF_BITMAP = 4
Const MF_CHECKED = 8

Private Sub Form_Load()
Dim hMenu As Long, hSubMenu As Long, lngID As Long
hMenu = GetMenu(Me.hWnd)
hSubMenu = GetSubMenu(hMenu, 0)
picBitmaps(0).Picture = picBitmaps(0).Image
lngID = GetMenuItemID(hSubMenu, 0)
Call ModifyMenu(hMenu, lngID, MF_BITMAP, lngID, CLng(picBitmaps(0).Picture))
...
这里的picBitmaps(0)).Picture = picBitmaps(0).Image是怎么回事?
zyl910 2002-11-10
  • 打赏
  • 举报
回复
ModifyMenuBynum 弹出式菜单的句柄, 菜单项索引, MF_BYPOSITION Or MF_BITMAP, 菜单项ID, 位图句柄

ModifyMenuBynum 弹出式菜单的句柄, 菜单项ID, MF_BYCOMMAND Or MF_BITMAP, 菜单项ID, 位图句柄


ModifyMenu,ModifyMenuBynum

VB声明
Declare Function ModifyMenu& Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As String)
Declare Function ModifyMenuBynum& Lib "user32" Alias "ModifyMenuA" (ByVal hMenu As Long, ByVal nPosition As Long, ByVal wFlags As Long, ByVal wIDNewItem As Long, ByVal lpString As Long)
说明
改变菜单条目。在vb里这个函数做出的许多改变都会有效的执行,但不能由vb菜单对象反映出来
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hMenu Long,菜单句柄
nPosition Long,欲改变的菜单条目的标识符。如在wFlags参数中指定了MF_BYCOMMAND,这个参数就代表欲改变的菜单条目的命令ID。如设置的是MF_BYPOSITION,这个参数就代表菜单条目在菜单中的位置(第一个条目的位置为零)
wFlags Long,一系列常数标志的组合。详见菜单常数标志表
wIDNewItem Long,指定菜单条目的新命令ID。如在wFlags参数中指定了MF_POPUP标志,就应是一个弹出式菜单的句柄
lpString String或Long,如在wFlags参数中指定了MF_STRING标志,就代表欲设置到菜单的字串。如设置的是MF_BITMAP,就代表一个Long变量,其中包含了一个位图句柄。如设置的是MF_OWNERDRAW,那么这个值就会包括到DRAWITEMSTRUCT和MEASUREITEMSTRUCT结构中,并由windows在条目需要重画的时候发出
注解
标志的下述组合形式是不允许的:MF_BYCOMMAND和MF_BYPOSITION;MF_CHECKED和MF_UNCHECKED;MF_MENUBARBREAK和MF_MENUBREAK;MF_DISABLED,MF_ENABLED和MF_GRAYED;MF_BITMAP,MF_STRING,MF_OWNERDRAW和MF_SEPARATOR

菜单常数标志表
MF_BITMAP 菜单条目是一幅位图。一旦设入菜单,这幅位图就绝对不能删除。所以不应该使用由vb的image属性返回的值
MF_BYCOMMAND 菜单条目由菜单的命令ID指定
MF_BYPOSITION 菜单条目由条目在菜单中的位置决定。零代表菜单中的第一个条目
MF_CHECKED 检查指定的菜单条目。不能与vb的checked属性兼容
MF_DISABLED 禁止指定的菜单条目。不与vb的enabled属性兼容
MF_ENABLED 允许指定的菜单条目。不与vb的enabled属性兼容
MF_GRAYED 禁止指定的菜单条目,并用浅灰色描述它。不与vb的enabled属性兼容
MF_MENUBARBREAK 在弹出式菜单中,将指定的条目放置于一个新列,并用一条垂直线分隔不同的列
MF_MENUBREAK 在弹出式菜单中,将指定的条目放置于一个新列。在顶级菜单中,将条目放置到一个新行
MF_OWNERDRAW 创建一个物主绘图菜单(由您设计的程序负责描绘每个菜单条目)
MF_POPUP 将一个弹出式菜单置于指定的条目。可用于创建子菜单及弹出式菜单
MF_SEPARATOR 在指定的条目处显示一条分隔线
MF_STRING 在指定的条目处放置一个字串。不与vb的caption属性兼容
MF_UNCHECKED 检查指定的条目。不能与vb的checked属性兼容
chenyu5188 2002-11-09
  • 打赏
  • 举报
回复
UP
softwaredream 2002-11-09
  • 打赏
  • 举报
回复
To:zyl910
非常感谢你的帮助,这几个程序我都看过了,非常好,只是要看其中的代码就太吃力了点。现在我只是想做最简单的,我记得好象就用GetMenu,GetSubMenu、GetMenuItemID、ModifyMenu这几个API就可以了,不知能否告知?
kingcom 2002-11-06
  • 打赏
  • 举报
回复
请教 zyl910(910:分儿,我来了!) 。。。
http://expert.csdn.net/Expert/topic/1154/1154772.xml?temp=2.572268E-02
zyl910 2002-11-06
  • 打赏
  • 举报
回复
做成那样的菜单有三种方法(其他的方法实现的效果太次):
一:自绘菜单:
我编的自绘菜单:

http://zyl910vb.51.net/vb/gui/DrawMenu-S.htm(有注释!特地为想学自绘菜单的人写的)
http://zyl910vb.51.net/vb/gui/CoolGUI.htm(效果比较好,但没有注释)
http://zyl910vb.51.net/vb/gui/ZXPMenu.htm(XP风格的菜单)

右击连接,目标另存为
注意把下载后的*.zip.jpg改名成*.zip

二:用窗体模拟菜单:
http://www.dapha.net/vb/list.asp?id=426
XP下拉菜单(影子效果,酷!!!)

软件版本: 无图片
软件类型: 菜单技术
运行环境: VB6.0/Win9x
授权方式: 免费代码
软件大小: 12K
软件评价:
整理日期: 2001-12-3
作 者: http://www.dapha.net
本日下载: 8 本周:246 总计:246
下载地址1: 本地下载
软件简介: 用过XP再看这个简直是一模一样,而且不用任何XP控件,非常棒!


http://www.21code.com/codebase/?pos=down&id=1913
源码类型: VisualBasic源码-菜单处理
上传时间: 2002-02-01
下载次数: 1336
源码大小: 46 KB 源码评价:

源码简介:
OFFICE XP风格菜单代码最新版


三、用进程级Hook拦截处理消息,自绘菜单窗体的非客户区
http://www.dapha.net/vb/list.asp?id=1926

1,486

社区成员

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

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