『HSPの裏技』シンプルモードステータスバー(HSP2.x 版)をHSP3.x バージョンへ書き換え、さらに、メニューを表示しているときにハイライト表示されているメニュー項目の説明をシンプルモードステータスバーで表示するコードを追加したサンプルです。
『HSPの裏技』シンプルモードステータスバー(HSP2.x 版)をHSP3.x バージョンへ書き換え、さらに、メニューを表示しているときにハイライト表示されているメニュー項目の説明をシンプルモードステータスバーで表示するコードを追加したサンプルです。
;【HSP3.x 移植版】
;『HSPの裏技』シンプルモードステータスバー
; (ハイライト表示されているメニュー項目の説明を表示する例)
; http://chokuto.ifdef.jp/urawaza/statusbar2.html
;
; [参照] 『Advanced HSP』ドロップダウンメニュー
; http://chokuto.ifdef.jp/advanced/dropdownmenu.html
#uselib "comctl32.dll"
#func InitCommonControlsEx "InitCommonControlsEx" int
#uselib "user32.dll"
#cfunc CreateMenu "CreateMenu"
#cfunc CreatePopupMenu "CreatePopupMenu"
#func AppendMenu "AppendMenuA" int,int,int,sptr
#func SetMenu "SetMenu" int,int
#func DrawMenuBar "DrawMenuBar" int
; 各種定数定義
#define ICC_BAR_CLASSES 4
#define WS_CHILD 0x40000000
#define WS_VISIBLE 0x10000000
#define CCS_BOTTOM 0x00000003
#define SB_SETTEXT 0x0401
#define SB_SETPARTS 0x0404
#define SB_SIMPLE 0x0409
#define SB_SIMPLEID 255
#define NULL 0
#define MF_POPUP 0x10
#define WM_MENUSELECT 0x011F
; メニュー項目IDを定義
#define CMD_ID_OPEN 101 ; 「開く」項目のID
#define CMD_ID_SAVE 102 ; 「保存」項目のID
#define CMD_ID_MESSAGE 104 ; 「メッセージ表示」項目のID
; コモンコントロールライブラリの初期化
initinfo = 8, ICC_BAR_CLASSES
InitCommonControlsEx varptr(initinfo)
; メニューバーの作成
; 「ファイル」メニューの作成
hmenuFile = CreatePopupMenu()
AppendMenu hmenuFile, 0, CMD_ID_OPEN, "開く(&O)"
AppendMenu hmenuFile, 0, CMD_ID_SAVE, "保存(&S)"
; 「ヘルプ」メニューの作成
hmenuHelp = CreatePopupMenu()
AppendMenu hmenuHelp, 0, CMD_ID_MESSAGE, "メッセージ表示(&M)"
; メニューバーの作成
hmenu = CreateMenu()
AppendMenu hmenu, MF_POPUP, hmenuFile, "ファイル(&F)"
AppendMenu hmenu, MF_POPUP, hmenuHelp, "ヘルプ(&H)"
SetMenu hwnd, hmenu
DrawMenuBar hwnd
; ステータスバーの作成
styleFlags = WS_CHILD | WS_VISIBLE | CCS_BOTTOM
winobj "msctls_statusbar32", "", 0, styleFlags, 0, 0
statusbarID = stat
; ステータスバーを3つのパーツに分ける
partspos = 80, 220, -1
sendmsg objinfo_hwnd(statusbarID), SB_SETPARTS, 3, varptr(partspos)
; パーツの表示テキスト設定
msgtext(0) = "パーツ1" ; 左揃えで表示
msgtext(1) = "\tパーツ2" ; 中央揃えで表示
msgtext(2) = "\t\tパーツ3" ; 右揃えで表示
repeat 3
; SB_SETTEXT メッセージ送信
sendmsg objinfo_hwnd(statusbarID), SB_SETTEXT, cnt, msgtext(cnt)
loop
; WM_MENUSELECT メッセージを処理するように登録
oncmd gosub *OnMenuSelect, WM_MENUSELECT
stop
*OnMenuSelect
; メニュー選択が切り替わった時
itemID = wparam & 0xFFFF
flags = (wparam >> 16) & 0xFFFF
hmenu = lparam
if (flags == 0xFFFF) & (hmenu == NULL) {
; メニューが閉じられた場合
msgtext = ""
} else {
; メニュー項目IDに応じて表示メッセージを決定
switch itemID
case CMD_ID_OPEN
msgtext = "ファイルを開きます"
swbreak
case CMD_ID_SAVE
msgtext = "ファイルに保存します"
swbreak
case CMD_ID_MESSAGE
msgtext = "メッセージを表示します"
swbreak
default
msgtext = ""
swbreak
swend
}
if (msgtext == "") {
; 表示メッセージがなければ非シンプルモード
sendmsg objinfo_hwnd(statusbarID), SB_SIMPLE, 0, 0
logmes "SB_SIMPLE (0)"
} else {
; 表示メッセージがある場合はシンプルモードで表示
sendmsg objinfo_hwnd(statusbarID), SB_SIMPLE, 1, 0
sendmsg objinfo_hwnd(statusbarID), SB_SETTEXT, SB_SIMPLEID, varptr(msgtext)
}
return