どちらもやることは同じです。
APIの『CheckMenuItem』を使い
CheckMenuItem メニューのハンドル, 項目のID, チェック状態
という形で3つの引数を設定するだけです。
項目のIDは前回のソースであればCMD_A、CMD_B、CMD_QUIT
今回のソースではIDM_ITEM1〜4がIDになります。
チェック状態はMFS_CHECKEDがチェック、MFS_UNCHECKEDがチェック無しという意味です。
今回のソースはKpanさんのソースに手を加えさせていただきました。
http://lhsp.s206.xrea.com/hsp_menu.html#2
// ポップアップメニューの表示サンプルソース (by Kpan)
// (注) エディタの[HSP]メニュー→[HSP拡張マクロを使用する]を要有効。
#include "user32.as"
; 項目ID
#enum IDM_ITEM1 = 1
#enum IDM_ITEM2
#enum IDM_ITEM3
#enum IDM_ITEM4
#define MFS_CHECKED 0x08
#define MFS_UNCHECKED 0x00
// チェックフラグ
dim checkf, 4;
checkf = 0, 0, 0, 0; // 全てチェック無しにしておく
onclick gosub *onjump ; マウスをクリックした時
; あるいはWM_CONTEXTMENU
; oncmd gosub *onjump, $7B
onexit *exit
; <サブのポップアップメニュー>
; サブメニューを作成し、ハンドルを取得
CreatePopupMenu
hMenu.0 = stat
; 第3パラはメニュー項目ID
AppendMenu hMenu.0, 0, IDM_ITEM3, "サブメニュー項目 3"
AppendMenu hMenu.0, 0, IDM_ITEM4, "サブメニュー項目 4"
; <メインのポップアップメニュー>
; メインのポップアップメニューを作成し、ハンドルを取得
CreatePopupMenu
hMenu.1 = stat
AppendMenu hMenu.1, 0, IDM_ITEM1, "メニュー項目 1"
; 第2パラを$800にするとセパレータ(区切り線)になる。
AppendMenu hMenu.1, $800, 0, ""
AppendMenu hMenu.1, 0, IDM_ITEM2, "メニュー項目 2"
; 第2パラメータを$10にするとサブメニューへ。
; 第3パラにサブメニューのハンドルを入れる。
AppendMenu hMenu.1, $10, hMenu.0, "サブメニュー"
stop
*onjump
; 右クリックされた時
if wparam = 2 {
; ポップアップメニュー表示。第1パラに開くメニューのハンドル
TrackPopupMenu hMenu.1, $100, ginfo(0), ginfo(1), 0, hwnd, 0
if stat = 0 : return ; 選択キャンセル
cmd == stat;
; statにメニュー項目ID
dialog "項目 "+stat+" を選択!"
if( cmd < 3 ) {
// メニュー項目1と2の処理
if( checkf(cmd-1) ) {
// チェック済みならばチェックを外す
checkf(cmd-1) = 0;
CheckMenuItem hMenu.1, cmd, MFS_UNCHECKED;
}
else {
// チェックされていなければ、チェックする
checkf(cmd-1) = 1;
CheckMenuItem hMenu.1, cmd, MFS_CHECKED;
}
}
else {
// サブメニュー項目3と4の処理
if( checkf(cmd-1) ) {
// チェック済みならばチェックを外す
checkf(cmd-1) = 0;
CheckMenuItem hMenu.0, cmd, MFS_UNCHECKED;
}
else {
// チェックされていなければ、チェックする
checkf(cmd-1) = 1;
CheckMenuItem hMenu.0, cmd, MFS_CHECKED;
}
}
return
}
return
*exit
; どこのウィンドウにも張り付いていないメニューは明示的に破棄
DestroyMenu hMenu.1
end