本文来源于网页设计爱好者web开发社区http://www.html.org.cn收集整理,欢迎访问。
*******************************************************
实用环境:pb6.5/pb70/pb80/pb90
功 能:位图菜单的制作
方 法:如下
*******************************************************
第一步,首先要建立一个menu对象,命名为:m_bitmap。设计格式有
一个主菜单 file,下面有4个子菜单new/open ave/exit,如下:
----file-----
-new
-open
-save
-exit
第二步,找4个位图文件,放到exe所在的目录下,命名为:new.bmp/open.bmp ave.bmp/exit.bmp
第三步,编代码
主窗体w_main,窗体类型main,加入主菜单m_menu。
实例变量声明:
//win32常量
constant integer image_bitmap = 0
constant integer lr_loadfromfile = 16
constant integer sm_cxmenucheck = 71
constant integer sm_cymenucheck = 72
constant integer mf_bitmap = 4
constant integer mf_byposition = 1024
全局外部函数引入api:
function ulong loadimagea(ulong hintance, string filename,uint utype,&
int x,int y,uint fload) library "user32.dll"
function boolean setmenuitembitmaps(ulong hmenu,uint upos,uint flags,&
ulong handle_bm1,ulong handle_bm2) library "user32.dll"
function int getsystemmetrics( int nindex ) library "user32.dll"
function ulong getmenuitemid(ulong hmenu,uint uitem) library "user32.dll"
function int getsubmenu(ulong hmenu,int pos) library "user32.dll"
function ulong getmenu(ulong hwindow) library "user32.dll"
function boolean modifymenu(ulong hmnu, ulong uposition, ulong uflags, &
ulong uidnewitem, long lpnewi) alias for modifymenua library "user32.dll"
open事件中:
long ll_mainhandle
long ll_submenuhandle
integer li_menuitemid
long ll_x
long ll_y
long ll_bitmapnew
long ll_bitmapopen
long ll_bitmapsave
long ll_bitmapexit
//取得菜单句柄
ll_mainhandle = getmenu(handle(this))
//取得第一个菜单项的句柄
ll_submenuhandle = getsubmenu(ll_mainhandle,0)
//装入图像数据
ll_bitmapnew = loadimagea(0,'new.bmp',image_bitmap,0,0,lr_loadfromfile)
ll_bitmapopen = loadimagea(0,'open.bmp',image_bitmap,0,0,lr_loadfromfile)
//取得第一个子菜单项的id并修改菜单
li_menuitemid = getmenuitemid(ll_submenuhandle,0)
modifymenu(ll_submenuhandle,li_menuitemid,mf_bitmap,li_menuitemid,ll_bitmapnew)
//取得第二个子菜单项的id并修改菜单
li_menuitemid = getmenuitemid(ll_submenuhandle,1)
modifymenu(ll_submenuhandle,li_menuitemid,mf_bitmap,li_menuitemid,ll_bitmapopen)
//取得菜单缺省check-mark位图的尺寸
ll_x = getsystemmetrics(sm_cxmenucheck)
ll_y = getsystemmetrics(sm_cymenucheck)
//按系统尺寸装入图像
ll_bitmapsave = loadimagea(0,'save.bmp', image_bitmap ,ll_x,ll_y,lr_loadfromfile)
ll_bitmapexit = loadimagea(0,'exit.bmp', image_bitmap ,ll_x,ll_y,lr_loadfromfile)
//设置菜单位图
setmenuitembitmaps(ll_submenuhandle,2,mf_byposition,ll_bitmapsave,ll_bitmapsave)
setmenuitembitmaps(ll_submenuhandle,3,mf_byposition,ll_bitmapexit,ll_bitmapexit)
感兴趣的,还不快试试。