本文來源于網頁設計愛好者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)
感興趣的,還不快試試。