調べてみるとSB_SETBKCOLORなるウィンドウメッセージを送れば背景色を変更できる…という
記述が出てきたのですが、試してみても上手くいかず、もう少し調べてみると
「ビジュアルスタイルには対応していない」という記述があり、
この方法はWindows10や11では使えない様子…?
他のやり方もわからないので、妥協案として、スタティックコントロールで「ステータスバーもどき」を
作ってみる方法でやってみました。
他に良い方法があるかもしれませんが、これでよろしければ。
//コメントの冒頭に"*"がついている行の色指定は0xBBGGRRという形で行うこと。(RRGGBBではないことに注意)
#include "comctl32.as"
#include "user32.as"
#include "gdi32.as"
#const WS_VISIBLE 0x10000000
#const WS_CHILD 0x40000000
#const CCS_BOTTOM 0x3
#const SS_CENTERIMAGE 0x200 //スタティックコントロールにこれを指定すると縦方向に中央揃えできる模様
#const WS_EX_CLIENTEDGE 0x200
#const WS_BORDER 0x800000
#const WM_SETTEXT 0xC
#const WM_CTLCOLORSTATIC 0x138
dim rect,4
//ステータスバーの高さを調べるために、一旦本物のステータスバーを作る
CreateStatusWindow WS_VISIBLE|WS_CHILD|CCS_BOTTOM,"",hwnd,0 : s_h=stat
GetWindowRect s_h,varptr(rect) : height=rect(3)-rect(1) //height:ステータスバーの高さ
DestroyWindow s_h //ステータスバーを消去
//スタティックコントロールでステータスバーもどきを作る。
//ここでは試しに画面の左端から右端までのサイズのもの一つを作る。
pos 0,ginfo_winy-height
//↓第3パラメータの「WS_EX_CLIENTEDGE」と第4パラメータの「|WS_BORDER」の有無で枠線の太さが変わる。
//「|WS_BORDER」だけを削除すれば少し細く、「WS_EX_CLIENTEDGE」だけを0にすればさらに細くなる。
winobj "static","",WS_EX_CLIENTEDGE,WS_VISIBLE|WS_CHILD|SS_CENTERIMAGE|WS_BORDER,ginfo_winx,height
st_h=objinfo(stat,2) //スタティックコントロールのハンドル
CreateSolidBrush 0xFF0000 : br_h=stat //*背景色のブラシを作成。ここでは青。
onexit *exit
oncmd gosub *st_color,WM_CTLCOLORSTATIC
s="hoge" : sendmsg st_h,WM_SETTEXT,0,varptr(s) //スタティックコントロールのテキストを変更
color 127,127,127 : boxf //わかりやすくするために灰色で染める。この行は削除して構いません。
stop
*st_color
if lparam=st_h { //lparamがステータスバーのハンドルかどうかを調べ、そうならば処理を行う。
SetTextColor wparam,0xFFFFFF //*文字の色 ここでは白
SetBkColor wparam,0xFF0000 //*背景色 ここでは青
return br_h //ブラシを返す必要がある
}
return
*exit
DeleteObject br_h //終了時にブラシを削除
end