ステータスバー

ちょっとした情報を表示するステータスバー。
でもユーザーにとってはうれしいものです。
そんなステータスバーを作ってみましょう。
全 体 の 流 れ
@ステータスバーウィンドウを作成
Aペインを設定
これだけで。
ステータスバーのスタイル
ステータスバーを作成するときに複数のスタイルを設定することができます。
スタイル意味
SBT_OWNERDRAWオーナー描画
SBT_NOBORDERS境界線なし
SBT_POPOUT凸形
SBT_RTLREADING右から左へ(ヘブライ語・アラビア語のみ)
SBT_SUNKEN凹形
ステータスバーメッセージの送信
ステータスバーにメッセージを送るにはSendMessage()関数を使います。
基本的に送るメッセージは以下のとおりです。
他にもありますがこの2つだけでステータスバーは作れます。
メッセージ意味wParamlParam戻り値
SB_SETTEXTテキストを設定するペインの番号テキスト設定したバイト数(だったかな?)
SB_SETPARTSペインを設定するペイン数サイズ以前の設定(だったかな?)
サンプル
ダウンロード(StatusWindow.lzh 3.92KB)
Private Sub Form_Load()
Dim cc As tagINITCOMMONCONTROLSEX
Dim PanePos(2) As Long

'コモンコントロールを初期化する
cc.dwSize = Len(cc)
cc.dwICC = ICC_BAR_CLASSES

'ステータスウィンドウを作成する
hStatusWnd = CreateStatusWindow(WS_VISIBLE Or WS_CHILD Or _
             CCS_BOTTOM Or SBARS_SIZEGRIP, _
    "ステータスウィンドウのサンプル", Me.hWnd, 0)
'ペイン複数作る
'最後の要素を-1にすると
'親ウィンドウの全体の幅の残りの幅を
'自動的に割り当てる
PanePos(0) = 200
PanePos(1) = 300
PanePos(2) = -1
Call SendMessageAny(hStatusWnd, SB_SETPARTS, 3, PanePos(0))

'テキストを設定する
Call SendMessageStr(hStatusWnd, SB_SETTEXT, 1, "x:0 y:0")
Call SendMessageStr(hStatusWnd, SB_SETTEXT, 2, "キャプション")
Me.Timer1.Enabled = True
Me.Timer1.Interval = 100
End Sub

Private Sub Timer1_Timer() Dim Pos As PointApi, hWnd As Long Dim Temp As String, cch As Long 'マウスの位置を取得 Call GetCursorPos(Pos) Call SendMessageStr(hStatusWnd, SB_SETTEXT, 1, _ "x" + Str(Pos.X) + " y" + Str(Pos.Y)) 'ウィンドウのハンドルを取得 hWnd = WindowFromPoint(Pos.X, Pos.Y) cch = GetWindowTextLength(hWnd) cch = cch * 2 'バッファの作成 Temp = String(cch, Chr(0)) 'ウィンドウのキャプション取得 Call GetWindowText(hWnd, Temp, Len(Temp)) Call SendMessageStr(hStatusWnd, SB_SETTEXT, 2, MidB(Temp, 1, cch)) End Sub