[Top Page][Edit][Discussion][Edit History][All Pages][Recent Changes][->Japanese]

メニューヘルプテキスト

メニューアイテムが選択されたときに、そのアイテムの説明をステータスバーに表示します。


スクリプト

; <<<< HSP 3.0 サンプル >>>>
;
;   メニューアイテムのヘルプテキストをステータスバーに表示
;

#uselib "comctl32.dll"
#func InitCommonControls "InitCommonControls"

#uselib "user32.dll"
#func CreateMenu      "CreateMenu"
#func CreatePopupMenu "CreatePopupMenu"
#func AppendMenu      "AppendMenuA"     int,int,int,sptr
#func SetMenu         "SetMenu"         int,int
#func DrawMenuBar     "DrawMenuBar"     int


#define WM_COMMAND      0x0111
#define WM_MENUSELECT   0x011F
#define SB_SETPARTS     0x0404
#define SB_SETTEXT      0x0401
#define SB_SIMPLE       0x0409

#define SB_SIMPLEID     255
#define SBT_NOBORDERS   0x0100

#define CMD_OPEN        1001    ;「開く」
#define CMD_SAVE        1002    ;「保存」
#define CMD_QUIT        1003    ;「終了」
#define CMD_MESSAGE     1004    ;「終了」

screen 0, 300, 200
oncmd gosub *OnCommand, WM_COMMAND
oncmd gosub *OnMenuSelect, WM_MENUSELECT

; コモンコントロールライブラリの初期化
InitCommonControls

; ==== メニューバー ====

; 「ファイル」メニュー
CreatePopupMenu : hmenuFile = stat
AppendMenu hmenuFile, 0, CMD_OPEN, "開く(&O)"
AppendMenu hmenuFile, 0, CMD_SAVE, "保存(&S)"
AppendMenu hmenuFile, $800, 0, ""               ; 区切り線
AppendMenu hmenuFile, 0, CMD_QUIT, "終了(&Q)"

; 「ヘルプ」メニュー
CreatePopupMenu : hmenuHelp = stat
AppendMenu hmenuHelp, 0, CMD_MESSAGE, "メッセージ表示(&M)"

; メニューバー作成
CreateMenu : hmenu = stat
AppendMenu hmenu, $10, hmenuFile, "ファイル(&F)"
AppendMenu hmenu, $10, hmenuHelp, "ヘルプ(&H)"
SetMenu hwnd, hmenu
DrawMenuBar hwnd

; ==== ステータスバー ====

; ステータスバー作成
winobj "msctls_statusbar32","",0,$50000003
hStatus = objinfo_hwnd(stat)

; ステータスバーを3つのパーツに分ける
partpos = 50, 120, -1
sendmsg hStatus, SB_SETPARTS, 3, varptr(partpos)
sendmsg hStatus, SB_SETTEXT, 0, "パーツ1"
sendmsg hStatus, SB_SETTEXT, 1, "パーツ2"
sendmsg hStatus, SB_SETTEXT, 2, "パーツ3"

stop


*OnCommand
; ==== WM_COMMAND メッセージを受け取ったとき ====

if lParam == 0 : gosub *OnMenuCommand
return

*OnMenuCommand
; ---- メニューアイテムからのコマンドメッセージ ----

itemId = wParam & $FFFF         ; メニューアイテム ID

if itemId == CMD_OPEN {
        dialog "*", 16
        if stat {
                dialog refstr+"を開きました"
        }
}
if itemId == CMD_SAVE {
        dialog "*", 17
        if stat {
                dialog refstr+"に保存しました"
        }
}
if itemId == CMD_QUIT {
        dialog "終了します"
        end
}
if itemId == CMD_MESSAGE {
        dialog "メニュー作成のテストです", 0, "メッセージ表示"
}
return 0


*OnMenuSelect
; ==== メニューアイテムの選択状態が切り替わったとき ====

if (wParam >> 16 == -1) & (lParam == 0) {
        ; --- メニューが閉じられたとき ---
        ; シンプルモード解除
        sendmsg hStatus, SB_SIMPLE, 0, 0
} else {
        ; --- メニューが開かれた or アイテムが選択されたとき ---
        ; メニューアイテム ID から表示文字列を選択
        msgtext = ""
        itemId = wParam & $FFFF
        if itemID == CMD_OPEN    : msgtext = "ファイルをオープンします。"
        if itemID == CMD_SAVE    : msgtext = "ファイルに保存します。"
        if itemID == CMD_QUIT    : msgtext = "アプリケーションを終了します。"
        if itemID == CMD_MESSAGE : msgtext = "メッセージダイアログを表示します。"

        ; シンプルモードに設定
        sendmsg hStatus, SB_SIMPLE, 1, 0

        ; 文字列を表示
        sendmsg hStatus, SB_SETTEXT, SB_SIMPLEID, msgtext
}
return 0

解説

解説は次のリンク先をどうぞ。 ただし、リンク先に書かれているスクリプトはマシン語を使ったものなので、それについては無視してください。

http://chokuto.ifdef.jp/urawaza/mcn/menuhelp.html