EnableMenuItem()API関数を使用してください。
http://yokohama.cool.ne.jp/chokuto/urawaza/api/EnableMenuItem.html
http://yokohama.cool.ne.jp/chokuto/urawaza/changemenu.html
http://www.kumei.ne.jp/c_lang/sdk/sdk_47.htm
#uselib "user32.dll"
#cfunc CreatePopupMenu "CreatePopupMenu"
#cfunc TrackPopupMenuEx "TrackPopupMenuEx" int, int, int, int, int, int
#cfunc EnableMenuItem "EnableMenuItem" int, int, int
#cfunc SetMenuItemInfo "SetMenuItemInfoA" int, int, int, var
#cfunc DestroyMenu "DestroyMenu" int
#func AppendMenu "AppendMenuA" int, int, int, sptr
#const WM_COMMAND 0x0111
#const WM_RBUTTONDOWN 0x0204
; メニューアイテムIDを定義
oncmd gosub *OnCommand, WM_COMMAND
oncmd gosub *OnRButton, WM_RBUTTONDOWN
onexit *exit
; ショートカットメニューの作成
hmenuPopup = CreatePopupMenu()
flg(0) = 0
AppendMenu hmenuPopup, flg(0), 12, "1: 有効"
flg(1) = 0x00000003
AppendMenu hmenuPopup, flg(1), 13, "2: 無効"
AppendMenu hmenuPopup, 0, 14, "3: 変更"
stop
;---------------WM_COMMAND が送られたときの処理------------------
*OnCommand
itemid = wparam & 0xffff
switch itemid
case 12
dialog "1: を選択しました", , "報告"
swbreak
case 13
dialog "2: を選択しました", , "報告"
swbreak
case 14
dim menuitem, 12
menuitem = 48, 0x00000040
if flg(0) {
flg(0) = 0
buf = "1: 有効"
menuitem(9) = varptr(buf), strlen(buf) + 1
} else {
flg(0) = 1
buf = "1: 無効"
menuitem(9) = varptr(buf), strlen(buf) + 1
}
ret = SetMenuItemInfo(hmenuPopup, 12, 0, menuitem)
ret = EnableMenuItem(hmenuPopup, 12, flg(0))
dim menuitem, 12
menuitem = 48, 0x00000040
if flg(1) {
flg(1) = 0
buf = "2: 有効"
menuitem(9) = varptr(buf), strlen(buf) + 1
} else {
flg(1) = 1
buf = "2: 無効"
menuitem(9) = varptr(buf), strlen(buf) + 1
}
ret = SetMenuItemInfo(hmenuPopup, 13, 0, menuitem)
ret = EnableMenuItem(hmenuPopup, 13, flg(1))
dialog "有効/無効を変更しました", , "報告"
swbreak
swend
return
;---------------WM_RBUTTON が送られたときの処理------------------
*OnRButton
ret = TrackPopupMenuEx(hmenuPopup, 0 | 0x0002, ginfo(0), ginfo(1), hwnd, 0)
return 0
;---------------終了処理------------------
*exit
ret = DestroyMenu(hmenuPopup)
end