ステータス バー (Windows コントロール)

ステータス バーは、アプリケーションがさまざまな種類の状態情報を表示できる親ウィンドウの下部にある水平ウィンドウです。 ステータス バーは、複数の種類の情報を表示するために分割できます。 次のスクリーン ショットは、Microsoft Windows ペイント アプリケーションのステータス バーを示しています。 この場合ステータス バーに、「ヘルプが必要な場合は、[ヘルプ] メニューの [ヘルプ トピック] をクリックしてください」というテキストが表示されます。 ステータス バーは、ヘルプ テキストと座標情報を含むウィンドウの下部にある領域です。

screen shot of the paint application, with a status bar that contains hints about online help

このセクションには、次のトピックがあります。

型とスタイル

ステータス バーの既定の位置は親ウィンドウの下部ですが、CCS_TOP スタイルを指定すると、親ウィンドウのクライアント領域の上部に表示することもできます。

SBARS_SIZEGRIP スタイルを指定すると、ステータス バーの右端にサイズ設定グリップを含めることができます。

Note

CCS_TOP スタイルと SBARS_SIZEGRIP スタイルを組み合わせることはお勧めしません。結果としてサイズ設定グリップが機能しないためです。

 

サイズと高さ

ステータス バーのウィンドウ プロシージャは、CreateWindowEx 関数で指定された値を無視して、ウィンドウの初期サイズと位置を自動的に設定します。 幅は、親ウィンドウのクライアント領域の幅と同じです。 高さは、ステータス バーのデバイス コンテキストで現在選択されているフォントのメトリックと、ウィンドウの境界線の幅に基づいています。

ウィンドウ プロシージャは、WM_SIZE メッセージを受信するたびに、ステータス バーのサイズを自動的に調整します。 通常、親ウィンドウのサイズが変更されると、親はステータス バーに WM_SIZE メッセージを送信します。

アプリケーションは、最小の高さをピクセル単位で指定する SB_SETMINHEIGHT メッセージをウィンドウに送信することで、ステータス バーの描画領域の最小の高さを設定できます。 描画領域には、ウィンドウの境界線は含されません。 最小の高さは、所有者が描画したステータス バーで描画する場合に便利です。 詳細については、この章で後述する「所有者描画ステータス バー」を参照してください。

ステータス バーの境界線の幅を取得するには、ウィンドウに SB_GETBORDERS メッセージを送信します。 メッセージには、幅を取得する 3 要素配列のアドレスが含まれます。

複数パーツのステータス バー

ステータス バーにはさまざまなパーツがあり、それぞれ異なるテキスト行が表示されます。 ステータス バーをパーツに分割するには、ウィンドウに SB_SETPARTS メッセージを送信し、作成するパーツ数と整数配列のアドレスを指定します。 配列にはパーツごとに 1 つの要素が含まれており、各要素はパーツの右端のクライアント座標を指定します。

ステータス バーには最大 256 個のパーツを含めることができますが、通常、アプリケーションの使用回数はそれより大幅に少なくなります。 ウィンドウに SB_GETPARTS メッセージを送信することで、ステータス バーのパーツ数と各パーツの右端の座標を取得します。

ステータス バーのテキスト操作

ステータス バーの任意のパーツのテキストを設定するには、SB_SETTEXT メッセージを送信し、パーツの 0 から始まるインデックス、パーツに描画する文字列のアドレス、および文字列を描画する手法を指定します。 描画手法では、テキストに罫線があるかどうかを決定し、罫線がある場合は罫線のスタイルを指定します。 また、親ウィンドウがテキストを描画するかどうかを決定します。 詳細については、次の「所有者描画ステータス バー」セクションを参照してください。

既定では、テキストはステータス バーの指定したパーツ内で左揃えになります。 テキストにタブ文字 (\ t) を埋め込むと、中央揃えまたは右揃えにできます。 1 つのタブ文字の右側のテキストが中央に配置され、2 番目のタブ文字の右側のテキストが右揃えになります。

ステータス バーからテキストを取得するには、SB_GETTEXTLENGTH および SB_GETTEXT メッセージを使用します。

アプリケーションで 1 つのパーツのみを含むステータス バーを使用する場合は、WM_SETTEXTWM_GETTEXT および WM_GETTEXTLENGTH メッセージを使用して、テキスト操作を実行します。 これらのメッセージは、インデックスが 0 のパーツのみを処理するため、ステータス バーを静的テキスト コントロールと同じように扱うことができます。

ステータス バーを作成せずに状態行を表示するには、DrawStatusText 関数を使用します。 この関数では、ステータス バーのウィンドウ プロシージャと同じ手法を使用してステータスを描画しますが、ステータス情報のサイズと位置は自動的に設定されません。 関数を呼び出すときは、状態情報のサイズと位置、および描画するウィンドウのデバイス コンテキストを指定する必要があります。

所有者描画ステータス バー

ステータス バーの個々のパーツは、所有者描画パーツとして定義できます。 この手法を使用すると、ウィンドウ パーツの外観を制御するよりも詳細に制御できます。 たとえば、テキストではなくビットマップを表示したり、別のフォントを使用してテキストを描画したりできます。

ウィンドウ パーツを所有者描画として定義するには、SB_SETTEXT メッセージをステータス バーに送信し、パーツと SBT_OWNERDRAW 描画手法を指定します。 SBT_OWNERDRAW を指定すると、lParam パラメーターは、アプリケーションがパーツを描画するときに使用できる 32 ビットのアプリケーション定義値です。 たとえば、フォント ハンドル、ビットマップ ハンドル、文字列のアドレスなどを指定できます。

ステータス バーは、所有者描画パーツを描画する必要がある場合、WM_DRAWITEM メッセージを親ウィンドウに送信します。 メッセージの wParam パラメーターはステータス バーの子ウィンドウ識別子であり、lParam パラメーターは DRAWITEMSTRUCT 構造体のアドレスです。 親ウィンドウでは、構造内の情報を使用してパーツを描画します。 ステータス バーの所有者描画パーツの場合、DRAWITEMSTRUCT には次の情報が含まれます。

メンバー 説明
CtlType 未定義。使用しないでください。
CtlID ステータス バーの子ウィンドウ識別子。
itemID 描画されるパーツの 0 から始まるインデックス。
itemAction 未定義。使用しないでください。
ItemState 未定義。使用しないでください。
hwndItem ステータス バーへのハンドル。
hDC ステータス バーのデバイス コンテキストへのハンドル。
rcItem 描画するウィンドウ パーツの座標。 座標は、このステータス バーの左上隅を起点とした相対座標です。
itemData SB_SETTEXT メッセージの lParam パラメーターに指定されたアプリケーション定義の 32 ビット値。

 

簡易モードのステータス バー

ステータス バーを 「簡易モード」に設定するには、SB_SIMPLE メッセージを送信します。 簡易モードのステータス バーには、1 つのパーツのみが表示されます。 ウィンドウのテキストを設定すると、ウィンドウは無効になりますが、次の WM_PAINT まで再描画されません。 メッセージを待機すると、ウィンドウが再描画される回数が最小限に抑えられ、画面のちらつきが軽減されます。 簡易モードのステータス バーは、ユーザーがメニューをスクロールしている間にメニュー アイテムのヘルプ テキストを表示する場合に便利です。

簡易モードの状態でステータス バーに表示される文字列は、非簡易モード時に表示される文字列とは別に維持されます。 つまり、簡易モードでウィンドウを配置し、そのテキストを設定し、非簡易モードのテキストを変更せずに非簡易モードに切り替えることができます。

簡易モードのステータス バーのテキストを設定する場合は、SBT_OWNERDRAW 以外の描画手法を指定できます。 簡易モードのステータス バーは、所有者描画をサポートしていません。

既定のステータス バーのメッセージ処理

このセクションでは、定義済みの STATUSCLASSNAME クラスのウィンドウ プロシージャによって処理されるメッセージについて説明します。

メッセージ 既定のプロセス
WM_CREATE ステータス バーを初期化します。
WM_DESTROY ステータス バーに割り当てられたリソースを解放します。
WM_GETFONT ステータス バーがテキストを描画する現在のフォントのハンドルを返します。
WM_GETTEXT ステータス バーの最初のパーツからバッファーにテキストをコピーします。 テキストの長さとテキストの描画に使用する手法を指定する 32 ビット値を返します。
WM_GETTEXTLENGTH ステータス バーの最初のパーツのテキストの長さと、テキストの描画に使用する手法を指定する 32 ビット値を返します。
WM_NCHITTEST マウス カーソルがサイズ設定グリップ内にある場合は、HTBOTTOMRIGHT 値を返し、サイズ設定カーソルが表示されます。 マウス カーソルがサイズ設定グリップにない場合、ステータス バーはこのメッセージを DefWindowProc 関数に渡します。
WM_PAINT ステータス バーの無効な領域をペイントします。 wParam パラメーターが NULL 以外の場合、コントロールは値が HDC であることを前提とし、そのデバイス コンテキストを使用して描画します。
WM_SETFONT ステータス バーのデバイス コンテキストにフォント ハンドルを選択します。
WM_SETTEXT 既定の描画操作 (ゼロとして指定) を使用して、指定したテキストをステータス バーの最初のパーツにコピーします。 正常にコピーされると TRUE をそうでない場合は、FALSE を返します。
WM_SIZE 親ウィンドウのクライアント領域の現在の幅とステータス バーの現在のフォントの高さに基づいてステータス バーのサイズを変更します。