没有合适的资源?快使用搜索试试~ 我知道了~
精彩编程与编程技巧-有 BitMap 之Menu...
需积分: 10 1 下载量 60 浏览量
2009-10-10
20:13:10
上传
评论
收藏 6KB TXT 举报
温馨提示
试读
6页
精彩编程与编程技巧-有 BitMap 之Menu ...
资源推荐
资源详情
资源评论
有 BitMap 之Menu
在Window API中,有一些名词要先清楚,假设有一功能表如下:
档案 编辑 选项 --> hMenu (功能表)
+-----+
|复制 |---------> hSubMenu (子功能表)
|贴上 |
|减下 -------------> MenuID (功能表项目)
| |
+-----+
如果,我们使用vb的功能表编辑器做出上面的Menu,那 hMenu的取得使用GetMenu() API
,而hSubMenu 的取得是 GetSubMenu,而GetSubMenu()的第二个参数指的是功能表的第
几个子功能表,以上例来说,编辑子功能表是第1个子功能表(以0为基准),所以编辑子
功能表的取得应用以下的呼叫 :
hMenu = GetMenu(Me.hwnd)
hSubMenu = GetSubMenu(hMenu, 1) '取得编辑子功能表的hSubMenu
而功能表项目则由以下的呼叫取得,第二参数指的是该子功能表的第几个项目(以0
开始),故复制 功能表项目 = 0 减下 = 2
MenuId = GetMenuItemID(hSubMenu, 0) '取得复制 的hMenuId
接着便是以ModifyMenu来更动MenuId成BitMap的方式
Set Pic1 = LoadPicture("E:\cli.bmp")
ModifyMenu hSubMenu, 0, MF_BITMAP Or MF_BYPOSITION, MenuId, pic1.Handle
在Window API中,有一些名词要先清楚,假设有一功能表如下:
档案 编辑 选项 --> hMenu (功能表)
+-----+
|复制 |---------> hSubMenu (子功能表)
|贴上 |
|减下 -------------> MenuID (功能表项目)
| |
+-----+
如果,我们使用vb的功能表编辑器做出上面的Menu,那 hMenu的取得使用GetMenu() API
,而hSubMenu 的取得是 GetSubMenu,而GetSubMenu()的第二个参数指的是功能表的第
几个子功能表,以上例来说,编辑子功能表是第1个子功能表(以0为基准),所以编辑子
功能表的取得应用以下的呼叫 :
hMenu = GetMenu(Me.hwnd)
hSubMenu = GetSubMenu(hMenu, 1) '取得编辑子功能表的hSubMenu
而功能表项目则由以下的呼叫取得,第二参数指的是该子功能表的第几个项目(以0
开始),故复制 功能表项目 = 0 减下 = 2
MenuId = GetMenuItemID(hSubMenu, 0) '取得复制 的hMenuId
接着便是以ModifyMenu来更动MenuId成BitMap的方式
Set Pic1 = LoadPicture("E:\cli.bmp")
ModifyMenu hSubMenu, 0, MF_BITMAP Or MF_BYPOSITION, MenuId, pic1.Handle
ModifyMenu 第二个参数 表示更动hSubMenu所指的子功能表中第几个功能表项目
第叁个参数 MF_BITMAP 表示用BitMap的方式显示
MF_STRING 表示用字串方式显示
MF_BYPOSITION 表示第二个参数的值代表是依位置来算
第四个参数 MenuId
第五个参数 显示图的hBitMap
另外,如何做到MenuItem的左方有一小Bitmap,右方仍是字串呢,使用以下的API
SetMenuItemBitmaps(
hSubMenu as Long , // handle of 子功能表
uItem as Long , // 更动第几个Menu Item
fuFlags as Long, // menu item flags
hbmUnchecked as Long, // handle of unchecked bitmap
hbmChecked as Long // handle of checked bitmap
)
Set Pic2 = LoadPicture("e:\cli2.BitMap")
Call SetMenuItemBitmaps(hSubMenu, 1, MF_BYPOSITION,pic2.Handle, Pic2.Handle)
这里有一个地方要特别注意,到底hbmUnchecked/hbmchecked 所指的BitMap图有多大呢,
如果pic2所放入的BitMap太大,那不会出现我们想要的图,那得自己想办法缩图;而使
用以下的API可以取得Menu Item左边Bitmap图的大小(By Pixels)
i = GetMenuCheckMarkDimensions
wd5 = i Mod 2 ^ 16 '宽
hi5 = i / 2 ^ 16 '高
第叁个参数 MF_BITMAP 表示用BitMap的方式显示
MF_STRING 表示用字串方式显示
MF_BYPOSITION 表示第二个参数的值代表是依位置来算
第四个参数 MenuId
第五个参数 显示图的hBitMap
另外,如何做到MenuItem的左方有一小Bitmap,右方仍是字串呢,使用以下的API
SetMenuItemBitmaps(
hSubMenu as Long , // handle of 子功能表
uItem as Long , // 更动第几个Menu Item
fuFlags as Long, // menu item flags
hbmUnchecked as Long, // handle of unchecked bitmap
hbmChecked as Long // handle of checked bitmap
)
Set Pic2 = LoadPicture("e:\cli2.BitMap")
Call SetMenuItemBitmaps(hSubMenu, 1, MF_BYPOSITION,pic2.Handle, Pic2.Handle)
这里有一个地方要特别注意,到底hbmUnchecked/hbmchecked 所指的BitMap图有多大呢,
如果pic2所放入的BitMap太大,那不会出现我们想要的图,那得自己想办法缩图;而使
用以下的API可以取得Menu Item左边Bitmap图的大小(By Pixels)
i = GetMenuCheckMarkDimensions
wd5 = i Mod 2 ^ 16 '宽
hi5 = i / 2 ^ 16 '高
剩余5页未读,继续阅读
资源评论
求伯乐
- 粉丝: 22
- 资源: 3095
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功