Win32プログラミング講座 〜 Step21. ステータスバーを使う@ 〜

ステータスバーとはウィンドウアプリケーションでよく見かける左のようなものです。ちょっとした情報を表示するために使われるポピュラー機能ですね。
どーやって埋め込むの?
イメージ画像では、ウィンドウにスッポリとはまっていますね。一見、スタティックコントロールのようにも見えますが、常にクライアント領域の端っこに表示されたり、分割表示できたりと、少し用途が違います。
具体的には、CreateStatusWindow関数を使用してステータスバーを生成し、表示するだけなので、作成方法はとてもシンプル。なにかしらアプリケーションを作るときには積極的に活用してしまいましょう(^^;
CreateStatusWindow (style As Long, lpszText As BytePtr, hwndParent As DWord, wID As DWord) As DWord
・styleにはウィンドウスタイル(WM_???)及びステータスバースタイルを指定します。
・lpszTextにはステータスバーの初期文字列を指定します(省略時は0を指定)。
・hwndParentには親ウィンドウのハンドルを指定します。
・wIDにはステータスバーを示すIDナンバーを指定します。
関数が成功すると、ステータスバーのハンドルが返ります。失敗すると 0 が返ります。
作ってみよう!
まずはstatusなどという名前のプロジェクトを新規作成します。ノーマルウィンドウベースで、プロジェクトオプションでは「コモンコントロールを使用する」にチェックを入れておきます。
プロジェクト生成が完了したら、メインウィンドウ(MainWnd)を適度なサイズにあわせ、以下のようにスタティックテキストでも入れておきましょう。

次に、MainWnd.sbpを開き、先頭部分に以下のような2行を追加しておきます。
' ----------------------------------------------------------------------------
' イベント プロシージャ
' ----------------------------------------------------------------------------
' このファイルには、ウィンドウ [MainWnd] に関するイベントをコーディングします。
' ウィンドウ ハンドル: hMainWnd
' メモ - 以下の領域を、変数、構造体、定数、関数を宣言するための、
' グローバル領域として利用することができます。
' ----------------------------------ここから----------------------------------
Const ID_STATUS = 70
Dim hStatusWnd As DWord
' ----------------------------------ここまで----------------------------------
|
ID_STATUSはステータスバーのIDです。hStatusWndは、ステータスバーのハンドルを格納するための変数です。
ここから、イベントコーディングを行っていきます…
Sub MainWnd_Destroy()
status_DestroyObjects()
PostQuitMessage(0)
End Sub
|
↑Destroyイベントはそのまま(--;
Sub MainWnd_Create(ByRef CreateStruct As CREATESTRUCT)
Dim ic As INITCOMMONCONTROLSEX
'コモンコントロールの初期化
ic.dwSize=Len(ic)
ic.dwICC=ICC_BAR_CLASSES
InitCommonControlsEx(ic)
'ステータスバーを作成
hStatusWnd = CreateStatusWindow( _
WS_CHILD or WS_VISIBLE or CCS_BOTTOM, _
NULL, _
hMainWnd, _
ID_STATUS)
'タイマー開始
SetTimer(hMainWnd,0,100,NULL)
End Sub
|
↑Createイベントでは、CreateStatusWindow関数によるステータスバーの生成を行います。その後、タイマー処理を開始させます。ここでは、100ミリ秒ごとにTimerイベントが呼び出されるようにセットしておきます。
Sub MainWnd_Resize(SizeType As Long, cx As Integer, cy As Integer)
'ステータスバーにサイズ変更情報を送る
SendMessage(hStatusWnd,WM_SIZE,cx,cy)
End Sub
|
↑ユーザーがウィンドウの大きさを変更したときなどに通知されるResizeイベントです。ウィンドウサイズの変更に伴い、ステータスバーにもサイズ情報を送っておきます。こうすることで、ステータスバーのサイズもウィンドウにあわせておくことができます。
Sub MainWnd_Timer(TimerID As Long)
Dim buffer[255] As Byte
Dim template[255] As Byte
'時刻をステータスバーに表示
lstrcpy(template,"tt hh時 mm分 ss秒")
GetTimeFormat(LOCALE_USER_DEFAULT, NULL, ByVal 0, template, buffer, 255)
SendMessage(hStatusWnd, SB_SETTEXT, 0, buffer)
End Sub
|
↑Timerイベントでは、templateにテンプレート文字列を格納し、それをもとに現在時刻の文字列をbufferに取得します。SB_SETTEXTメッセージでステータスバー内の文字列を変更しています。
今回はこれで完了です。コンパイル&実行で、ステータスバー内の時計が秒刻みで動くかどうかチェックしておきましょう。
前へ戻る - 次へ進む
トップへ戻る
©2005 Discoversoft
|