『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