;メニューバーを使う
#include "llmod.as"
#module
dim hPopupMenu,16 ;16個までのポップアップメニューが作れる
#deffunc setmenu
mref bmscr,67
dllproc "CreateMenu",a,0,D_USER
hMenu=dllret@
prm=bmscr.13,hMenu
dllproc "SetMenu",prm,2,D_USER
dllproc "DrawMenuBar",bmscr.13,1,D_USER
return
#deffunc setpopup str,int
mref st,32
string=st
mref id,1
mref bmscr,67
dllproc "CreatePopupMenu",prm,0,D_USER
hPopupMenu.number=dllret@
getptr pstring,string
strlen length,string
menuiteminfo=44,0x0017,0x0000,0x0000,id,hPopupMenu.number,0,0,0,pstring,length
;0x0017はMIIM_STATE or MIIM_ID or MIIM_SUBMENU or MIIM_TYPE
;0x0000はMFT_STRING
;次の0x0000はMF_ENABLED
getptr pmenuiteminfo,menuiteminfo
prm=hMenu,-1,0x0400,pmenuiteminfo ;0x0400はMF_BYPOSITION
dllproc "InsertMenuItemA",prm,4,D_USER
dllproc "DrawMenuBar",bmscr.13,1,D_USER
number++ ;ポップアップメニューの個数を増やす
return
#deffunc additem str,int,int,int
mref st,32
mref num,1
mref id,2
mref ftype,3
string=st
getptr pstring,string
strlen length,string
menuiteminfo=44,0x0013,ftype,0x0000,id,0,0,0,0,pstring,length
;0x0013はMIIM_STATE or MIIM_ID or MIIM_TYPE
;0x0000はMFS_ENABLED
getptr pmenuiteminfo,menuiteminfo
prm=hPopupMenu.num,-1,0x0400,pmenuiteminfo
dllproc "InsertMenuItemA",prm,4,D_USER
dllproc "DrawMenuBar",bmscr.13,1,D_USER
return
#deffunc checkitem int,int,int
mref popupnum,0
mref menunum,1
mref checkflg,2
if checkflg : checkmark=0x0008 : else : checkmark=0x0000
;0x0008はMFS_CHECKED、0x0000はMFS_UNCHECKED
menuiteminfo=44,0x0009,0,checkmark,0,0,0,0,0,0,0
;0x0009はMIIM_STATE or MIIM_CHECKMARKS
getptr pmenuiteminfo,menuiteminfo
prm=hPopupMenu.popupnum,menunum,0x0400,pmenuiteminfo
dllproc "SetMenuItemInfoA",prm,4,D_USER
dllproc "DrawMenuBar",bmscr.13,1,D_USER
return
#deffunc getcmd val
mref cmd,16
getptr pmsg,msg
prm=pmsg,0,0,0,0
dllproc "PeekMessageA",prm,5,D_USER
if dllret@=0 : cmd=0 : return
dllproc "GetMessageA",prm,4,D_USER
if (dllret@=0)|(dllret@=-1) : end
if msg.1=0x0111 : cmd=msg.2 & 0xffff : else : cmd=0
dllproc "TranslateMessage",pmsg,1,D_USER
dllproc "DispatchMessageA",pmsg,1,D_USER
return
#global
setmenu
setpopup "項目1",10
additem "アイテム1",0,11
additem "アイテム2",0,12
additem "",0,,$800
additem "アイテム3",0,13
setpopup "項目2",20
additem "アイテム4",1,21
additem "アイテム5",1,22
additem "アイテム6",1,23
checkflg=0 ;チェックマーク用フラグ
*getmessage
getcmd cmd
if cmd=11 : dialog "アイテム1が選択されました"
if cmd=12 : dialog "アイテム2が選択されました"
if cmd=13 : dialog "アイテム3が選択されました"
if cmd=21 : dialog "アイテム4が選択されました"
if cmd=22 : dialog "アイテム5が選択されました"
if cmd=23 {
dialog "アイテム6が選択されました\nアイテム6のチェックマークを変更します"
checkflg=checkflg^1 ;0ならば1に、1ならば0に設定
checkitem 1,2,checkflg
}
goto *getmessage
|