『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_CLASSESInitCommonControlsEx 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, hmenuDrawMenuBar hwnd; ステータスバーの作成styleFlags = WS_CHILD | WS_VISIBLE | CCS_BOTTOMwinobj "msctls_statusbar32", "", 0, styleFlags, 0, 0statusbarID = stat; ステータスバーを3つのパーツに分けるpartspos = 80, 220, -1sendmsg 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_MENUSELECTstop*OnMenuSelect; メニュー選択が切り替わった時itemID = wparam & 0xFFFFflags = (wparam >> 16) & 0xFFFFhmenu = lparamif (flags == 0xFFFF) & (hmenu == NULL) {; メニューが閉じられた場合msgtext = ""} else {; メニュー項目IDに応じて表示メッセージを決定switch itemIDcase CMD_ID_OPENmsgtext = "ファイルを開きます"swbreakcase CMD_ID_SAVEmsgtext = "ファイルに保存します"swbreakcase CMD_ID_MESSAGEmsgtext = "メッセージを表示します"swbreakdefaultmsgtext = ""swbreakswend}if (msgtext == "") {; 表示メッセージがなければ非シンプルモードsendmsg objinfo_hwnd(statusbarID), SB_SIMPLE, 0, 0logmes "SB_SIMPLE (0)"} else {; 表示メッセージがある場合はシンプルモードで表示sendmsg objinfo_hwnd(statusbarID), SB_SIMPLE, 1, 0sendmsg objinfo_hwnd(statusbarID), SB_SETTEXT, SB_SIMPLEID, varptr(msgtext)}return